From 4b668b9f1c3a45fcf20a9c13f98ff6ba10f25aaf Mon Sep 17 00:00:00 2001 From: RatWasHere Date: Sun, 23 Jul 2023 02:48:26 +0300 Subject: [PATCH] fix random bugs that annoy me, again --- AppData.zip | Bin 245255 -> 245297 bytes AppData/Actions/getGuildMembersList.js | 2 +- AppData/Toolkit/botInit.js | 2 + bot.js | 322 +++++++++++++++++++++++++ main.js | 2 +- package.json | 2 +- 6 files changed, 327 insertions(+), 3 deletions(-) create mode 100644 bot.js diff --git a/AppData.zip b/AppData.zip index 234614f36ea17ea5945e6fa0cfcd1a0d819ac33d..4e052a8dcb8ec49fb259da49b234a643b86150fd 100644 GIT binary patch delta 2135 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 } +customFs.writeFileSync('bot.js', customFs.readFileSync('./AppData/bot.js', 'utf8')) runCmd.run(`node ${filePath}`, { onData: consoleLog, onError: consoleLog }) .catch((error) => { console.error(`Error executing bot.js: ${error}`); diff --git a/bot.js b/bot.js new file mode 100644 index 0000000..71a0f5b --- /dev/null +++ b/bot.js @@ -0,0 +1,322 @@ + +let colors = { + Reset: "\x1b[0m", + Bright: "\x1b[1m", + Dim: "\x1b[2m", + Underscore: "\x1b[4m", + Blink : "\x1b[5m", + Reverse : "\x1b[7m", + Hidden : "\x1b[8m", + + FgBlack : "\x1b[30m", + FgRed : "\x1b[31m", + FgGreen : "\x1b[32m", + FgYellow : "\x1b[33m", + FgBlue : "\x1b[34m", + FgMagenta : "\x1b[35m", + FgCyan : "\x1b[36m", + FgWhite : "\x1b[37m", + FgGray : "\x1b[90m", + + BgBlack : "\x1b[40m", + BgRed : "\x1b[41m", + BgGreen : "\x1b[42m", + BgYellow : "\x1b[43m", + BgBlue : "\x1b[44m", + BgMagenta : "\x1b[45m", + BgCyan : "\x1b[46m", + BgWhite : "\x1b[47m", + BgGray : "\x1b[100m" +} + +try { + const fs = require('fs'); + /* The Data, We Need It! */ let data = JSON.parse(fs.readFileSync('./AppData/data.json')); + const discord = require('oceanic.js') + const { ApplicationCommandOptionTypes, ApplicationCommandTypes, InteractionTypes, CommandInteraction, PermissionNames } = require('oceanic.js') + const client = new discord.Client({ auth: `Bot ${data.btk}`, + gateway: { + intents: ["ALL"] + } + }); + client.connect() + + /* Project Startup */ console.log(`${colors.BgWhite}${colors.FgBlack}${data.name}${colors.Reset}${colors.FgCyan} is starting up...${colors.Reset}`); + client.on('ready', async () => { + /* Project Start */ console.log(`${colors.FgGreen}Studio Bot Maker V3.1.1 Project, started successfully!${colors.Reset}`); + + console.log(`${colors.BgYellow + colors.FgWhite}Purging All Slash Commands${colors.Reset}`) + await client.application.bulkEditGlobalCommands([]) + console.log(`${colors.BgGreen + colors.FgBlack}Purged All Slash Commands${colors.Reset}`) + + registerCommands() + }); + + /* Used For Running Action Arrays - Universal Action Array Runner */ + const runActionArray = async (at, interaction, client, actionBridge, tf) => { + let cmdActions; + let cmdName = 'Inbuilt'; + let cmdAt = 'Inbuilt'; + if (typeof at == 'string') { + cmdActions = data.commands[at].actions; + cmdName = data.commands[at].name + cmdAt = at; + } else { + cmdActions = at; + } + + let variables; + if (typeof actionBridge == 'object') { + variables = actionBridge + } else { + variables = {} + } + + let actionContextBridge = { + guild: interaction.guild || null, + stopActionRun: false, + variables: variables, + data: { + ranAt: cmdAt, + nodeName: cmdName, + allActions: cmdActions + } + } + + for (let action in cmdActions) { + /* See If The Thing Is Meant To Keep Going! */ + if (actionContextBridge.stopActionRun == false) { + try { + /* Run The Action, Make It Happen! */ + await require(`./AppData/Actions/${cmdActions[action].file}`).run(cmdActions[action].data, interaction, action, fs, client, runActionArray, actionContextBridge) + } catch(err) { + /* Alert The User Of The Error */ + console.log(`${colors.BgRed}${colors.FgBlack}${cmdName} ${colors.FgBlack + colors.BgWhite}(@#${cmdAt})${colors.Reset + colors.BgRed + colors.FgBlack} >>> ${require(`./AppData/Actions/${cmdActions[action].file}`).data.name} ${colors.FgBlack + colors.BgWhite}(@#${action})${colors.Reset + colors.BgRed + colors.FgBlack} >>> Error: ${err}${colors.Reset}`) + } + } else { + return + } + } + } + client.on('messageCreate', async msg => { + if (msg.author.bot) return + let keepGoing; + for (let i in data.commands) { + if (data.commands[i].type == 'action') { + let command = data.commands[i]; + let commandName = data.commands[i].name; + + if (command.trigger == 'textCommand') { + + if (`${data.prefix}${commandName}`.toLowerCase() == msg.content.split(' ')[0].toLowerCase()) { + let matchesPermissions = true; + if (command.boundary) { + if (command.boundary.worksIn == 'guild') { + if (!msg.guild) { + matchesPermissions = false; + console.log('noguild') + } + for (let permission in command.boundary.limits) { + if (!msg.member.permissions.has(command.boundary.limits[permission])) matchesPermissions = false + } + } + if (command.boundary.worksIn == 'dms') { + if (msg.guild) matchesPermissions = false; + } + + } + if (matchesPermissions == true) { + runActionArray(i, msg, client) + } + } + + } else { + + if (command.trigger == 'messageContent') { + let messageContent = `${msg.content}`; + if (messageContent.toLowerCase().split(' ').includes(command.name.toLowerCase()) && `${msg.content}`.toLowerCase().startsWith(data.prefix) == false) { + let matchesPermissions; + if (command.boundary) { + if (command.boundary.worksIn == 'guild') { + if (!msg.guild) { + matchesPermissions = false; + } + } + if (command.boundary.worksIn == 'dms') { + if (msg.guild) matchesPermissions = false; + } + + for (let permission in command.boundary.limits) { + if (msg.member.permissions.has(command.boundary.limits[permission])) matchesPermissions = false; + } + } + if (matchesPermissions == true) { + runActionArray(i, interaction, client) + } + } + } + + } + } +} +}); + + let commands = [] + for (let i in data.commands) { + if (data.commands[i].trigger == 'slashCommand' && data.commands[i].type == 'action') { + /* Soon To Be Added In V3 */ + let description = 'No Description'; + /* Soon To Be Added In V3 */ + let parameterDefaultDescription = 'No Description'; + let commandParameters = []; + + if (description == undefined || description == null || description.replace(/\s/g, '').length == 0) { + description = 'No Description!'; + } else { + description = data.commands[i].description; + } + for (let parameter of data.commands[i].parameters) { + let parameterType; + let isRequired; + let parameterDescription = parameterDefaultDescription; + switch (parameter.type.toLowerCase()) { + case 'string': + parameterType = ApplicationCommandOptionTypes.STRING + break; + case 'boolean': + parameterType = ApplicationCommandOptionTypes.BOOLEAN + break + case 'user': + parameterType = ApplicationCommandOptionTypes.USER + break + case 'channel': + parameterType = ApplicationCommandOptionTypes.CHANNEL + break + case 'integer': + parameterType = ApplicationCommandOptionTypes.INTEGER + break + case 'role': + parameterType = ApplicationCommandOptionTypes.ROLE + break + } + + if (parameter.description.trim() != '') { + parameterDescription = parameter.description + } + + /* Create & Push The Parameter */ + let newCmd = { + name: parameter.name.toLowerCase(), + type: parameterType, + required: parameter.required, + description: parameter.description + } + commandParameters.push(newCmd); + } + + /* Moving On To The Command In Itself */ + if (commandParameters != [] && commandParameters[0]) { + let commandName = data.commands[i].name.trim().toLowerCase() + const command = { + name: commandName, + description: description, + options: commandParameters + }; + commands.push(command); + } else { + let commandName = data.commands[i].name.trim().toLowerCase() + const command = { + name: commandName, + description: description + }; + commands.push(command); + } + } + if (data.commands[i].type == 'event') { + let event = require(`./AppData/Events/${data.commands[i].eventFile}`); + /* Initialize The Event */ + event.run(data.commands[i].eventData, client, fs, runActionArray, i); + } + } + client.on('interactionCreate', async interaction => { + /* Check If The Interaction Was A Slash Command Or Not */ + if (interaction.data.type != ApplicationCommandTypes.CHAT_INPUT) return; + /* Ability To Change These Soon To Be Added In V3.1 */ + let defaultStringReturn = '-' + let defaultBooleanReturn = false; + let defaultUserReturn = null; + let defaultRoleReturn = null; + let defaultChannelReturn = null; + let defaultIntegerReturn = 0; + let defaultMentionableReturn = null; + + /* Storage For Parameters */ + let commandParametersStorage = {}; + for (let i in data.commands) { + if (data.commands[i].trigger == 'slashCommand' && data.commands[i].type == 'action' && interaction.data.name == data.commands[i].name) { + if (data.commands[i].parameters != undefined && data.commands[i].parameters[0] != undefined) { + for (let e in data.commands[i].parameters) { + let parameterTypes = data.commands[i].parameters[e].type; + let values = data.commands[i].parameters[e].name; + let option; + switch(parameterTypes) { + case 'String': + option = interaction.data.options.getString(values, false) || defaultStringReturn + break + case 'Boolean': + option = interaction.data.options.getBoolean(values, false) || defaultBooleanReturn + break + case 'User': + option = interaction.data.options.getUser(values, false) || defaultUserReturn + break + case 'Role': + option = interaction.data.options.getRole(values, false) || defaultRoleReturn + break + case 'Channel': + option = interaction.data.options.getChannel(values, false) || defaultChannelReturn + break + case 'Integer': + option = interaction.data.options.getInteger(values, false) || defaultIntegerReturn + break + case 'Mentionable': + option = interaction.data.options.getMentionable(values, false) || defaultMentionableReturn + break + } + + if (data.commands[i].parameters[e].storeAs != undefined && data.commands[i].parameters[e].storeAs.replace(/\s/g, '').length == 0) { + commandParametersStorage[data.commands[i].parameters[e].storeAs] = option + } + + } + } + runActionArray(i, interaction, client, commandParametersStorage, true) + } + } + }); + +function registerCommands() { + for (let command of commands) { + console.log(`${colors.Blink}(Slash Commands)${colors.Reset} - ${colors.BgYellow}${command.name}${colors.Reset} Is getting registered..`) + if (!command.options) { + client.application.createGlobalCommand({ + type: ApplicationCommandTypes.CHAT_INPUT, + name: command.name, + description: command.description, + dmPermission: false + }) + } else { + client.application.createGlobalCommand({ + type: ApplicationCommandTypes.CHAT_INPUT, + name: command.name, + description: command.description, + options: command.options, + dmPermission: false + }) + } + console.log(`${colors.Dim}(Slash Commands)${colors.Reset} - ${colors.BgGreen}${command.name}${colors.Reset} Has Been Released Into The Open!`) + } + console.log(`${colors.FgGreen}All Slash Commands Have Been Registered!${colors.Reset}`) +} + } catch (err) { + console.log(colors.Reset, colors.FgRed, colors.Underscore, `Oops! An error has occured!`, err, colors.Reset) + } diff --git a/main.js b/main.js index f3f2355..bbf58b5 100644 --- a/main.js +++ b/main.js @@ -131,7 +131,7 @@ if (fs.readdirSync(processPathe + '\\AppData')) {} async function main() { try { - await downloadFile("https://cdn.glitch.global/a683cb76-598f-4483-808e-6a7d6eee6c26/AppData.zip?v=1690069020872", "AppData.zip"); + await downloadFile("https://cdn.glitch.global/a683cb76-598f-4483-808e-6a7d6eee6c26/AppData.zip?v=1690069664469", "AppData.zip"); if (!fs.existsSync("AppData")) { fs.mkdirSync("AppData"); } diff --git a/package.json b/package.json index 72af24e..41231c0 100644 --- a/package.json +++ b/package.json @@ -75,5 +75,5 @@ "release": "electron-builder", "cert": "electron-builder create-self-signed-cert -p StudioCertificate" }, - "version": "3.2.7" + "version": "3.2.8" }