Advertisement
spiralvibes

Slash commands.js handler

Feb 21st, 2023
39
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. const { SlashCommandBuilder, REST, Routes } = require("discord.js")
  2. const config = require("../settings.json")
  3. const dirSetup = config.slashCommandDirs;
  4. const { readdirSync, lstatSync } = require("node:fs");
  5. module.exports = async (client) => {
  6.     try {
  7.         let allCommands = new Array();
  8.         readdirSync(`${process.cwd()}/slashCommands/`).forEach((dir) => {
  9.             if(lstatSync(`${process.cwd()}/slashCommands/${dir}`).isDirectory()) {
  10.                 let cmdSetup = dirSetup.find(d=>d.folderName == dir);
  11.                 if(cmdSetup) {
  12.                     readdirSync(`${process.cwd()}/slashCommands/${dir}/`).forEach(async file => {
  13.                         if(file.endsWith(".js") && !lstatSync(`${process.cwd()}/slashCommands/${dir}/${file}`).isDirectory()) {
  14.                             let pull = require(`${process.cwd()}/slashCommands/${dir}/${file}`)
  15.                             if(pull.name && pull.description) {
  16.                                 let Command = new SlashCommandBuilder().setName(`${cmdSetup.CmdName}`).setDescription(`${cmdSetup.CmdDescription}`);
  17.                                 Command.addSubcommand((sub) => {
  18.                                     sub.setName(`${pull.name}`).setDescription(`${pull.description}`)
  19.                                     if(pull.options && pull.options.length > 0) {
  20.                                         for(option of pull.options) {
  21.                                             if(option.type && option.name && option.description) {
  22.                                                 let type = option.type;
  23.                                                 let name = option.name;
  24.                                                 let description = option.description;
  25.                                                 let required = false;
  26.                                                 if(option.required && option.required == true) {
  27.                                                     required = true;
  28.                                                 }
  29.                                                 if(type == "String") {
  30.                                                     sub.addStringOption(option => option.setName(String(name).toLowerCase()).setDescription(String(description).toLowerCase()).setRequired(required))
  31.                                                 }
  32.                                                 if(type == "User") {
  33.                                                     sub.addUserOption(option => option.setName(String(name).toLowerCase()).setDescription(String(description).toLowerCase()).setRequired(required))
  34.                                                 }
  35.                                                 if(type == "Role") {
  36.                                                     sub.addRoleOption(option => option.setName(String(name).toLowerCase()).setDescription(String(description).toLowerCase()).setRequired(required))
  37.                                                 }
  38.                                                 if(type == "Channel") {
  39.                                                     sub.addChannelOption(option => option.setName(String(name).toLowerCase()).setDescription(String(description).toLowerCase()).setRequired(required))
  40.                                                 }
  41.                                                 if(type == "Integer") {
  42.                                                     sub.addIntegerOption(option => option.setName(String(name).toLowerCase()).setDescription(String(description).toLowerCase()).setRequired(required))
  43.                                                 }
  44.                                                 if(type == "StringChoices") {
  45.                                                     let narray = [];
  46.                                                     option.choices.forEach(choice => {
  47.                                                         narray.push({ name: `${choice.name}`, value: `${choice.description}`})
  48.                                                     })
  49.                                                     sub.addStringOption(option => option.setName(String(name).toLowerCase()).setDescription(String(description).toLowerCase()).setRequired(required).setChoices(narray))
  50.                                                 }
  51.                                             }
  52.                                         }
  53.                                     }
  54.                                     return sub;
  55.                                 })
  56.                                 allCommands.push(Command.toJSON())
  57.                                 client.slashCommands.set(String(cmdSetup.CmdName).replace(/\s+/g, '_').toLowerCase() + pull.name, pull)
  58.                             }
  59.                         }
  60.                     })
  61.                 } else {
  62.                     console.log(`Unable To Find Folder Configuration.`)
  63.                 }
  64.             } else {
  65.                 let pull = require(`../slashCommands/${dir}`)
  66.                 if(pull.name && pull.description) {
  67.                     let sub = new SlashCommandBuilder().setName(String(pull.name).toLowerCase().replace(/\s+/g, '_')).setDescription(String(pull.description))
  68.                     if(pull.options && pull.options.length > 0) {
  69.                         for(option of pull.options) {
  70.                             if(option.type && option.name && option.description) {
  71.                                 let type = option.type;
  72.                                 let name = option.name;
  73.                                 let description = option.description;
  74.                                 let required = false;
  75.                                 if(option.required && option.required == true) {
  76.                                     required = true;
  77.                                 }
  78.                                 if(type == "String") {
  79.                                     sub.addStringOption(option => option.setName(String(name).toLowerCase()).setDescription(String(description).toLowerCase()).setRequired(required))
  80.                                 }
  81.                                 if(type == "User") {
  82.                                     sub.addUserOption(option => option.setName(String(name).toLowerCase()).setDescription(String(description).toLowerCase()).setRequired(required))
  83.                                 }
  84.                                 if(type == "Role") {
  85.                                     sub.addRoleOption(option => option.setName(String(name).toLowerCase()).setDescription(String(description).toLowerCase()).setRequired(required))
  86.                                 }
  87.                                 if(type == "Channel") {
  88.                                     sub.addChannelOption(option => option.setName(String(name).toLowerCase()).setDescription(String(description).toLowerCase()).setRequired(required))
  89.                                 }
  90.                                 if(type == "Integer") {
  91.                                     sub.addIntegerOption(option => option.setName(String(name).toLowerCase()).setDescription(String(description).toLowerCase()).setRequired(required))
  92.                                 }
  93.                                 if(type == "StringChoices") {
  94.                                     let narray = [];
  95.                                     option.choices.forEach(choice => {
  96.                                         narray.push({ name: `${choice.name}`, value: `${choice.description}`})
  97.                                     })
  98.                                     sub.addStringOption(option => option.setName(String(name).toLowerCase()).setDescription(String(description).toLowerCase()).setRequired(required).setChoices(narray))
  99.                                 }
  100.                             }
  101.                         }
  102.                     }
  103.                     allCommands.push(sub.toJSON())
  104.                     client.slashCommands.set("normal" + pull.name, pull)
  105.                 } else {
  106.                     console.log(file, `error -> missing a help.name, or help.name is not a string.`.brightGreen);
  107.                 }
  108.             }
  109.         });
  110.         // LOADING ALL COMMANDS INTO THE BOT.
  111.         client.on("ready", async () => {
  112.             if(config.loadSlashsGlobal == false) {
  113.                 const token = client.token;
  114.                 const rest = new REST({ version: 10 }).setToken(token);
  115.                 rest.put(Routes.applicationCommands(client.user.id), { body: [] })
  116.                 client.guilds.cache.forEach((guild) => {
  117.                     let guildId = guild.id;
  118.                     (async () => {
  119.                         try {
  120.                             const data = await rest.put(
  121.                                 Routes.applicationGuildCommands(client.user.id, guildId),
  122.                                 { body: allCommands },
  123.                             );
  124.                             console.log(`${`Successfully`.bold.green} Loaded ${`(/)`.brightGreen} ${allCommands.length} Commands For: ${`${guild.name}`.brightRed}`);
  125.                         } catch (error) {
  126.                             console.log(`${`Unable`.bold.red} To Load ${`(/)`.brightGreen} ${allCommands.length} Commands For: ${`${guild.name}`.brightRed}`);
  127.                         }
  128.                     })();
  129.                 })
  130.             }
  131.             if(config.loadSlashsGlobal == true) {
  132.                 const token = client.token;
  133.                 const rest = new REST({ version: 10 }).setToken(token);
  134.                 client.guilds.cache.forEach((guild) => {
  135.                     let guildId = guild.id;
  136.                     rest.put(Routes.applicationGuildCommands(client.user.id, guildId), { body: [] })
  137.                 })
  138.                 try {
  139.                     const data = await rest.put(
  140.                         Routes.applicationCommands(client.user.id),
  141.                         { body: allCommands },
  142.                     );
  143.                     console.log(`${`Successfully`.bold.green} Loaded ${`(/)`.brightGreen} ${allCommands.length} Commands For: ${`ALL POSSIBLE GUILDS`.brightRed}`);
  144.                 } catch (error) {
  145.                     console.log(`${`Unable`.bold.red} To Load ${`(/)`.brightGreen} ${allCommands.length} Commands For: ${`ALL POSSIBLE GUILDS`.brightRed}`);
  146.                 }
  147.             }
  148.         })
  149.         client.on("guildCreate", async (guild) => {
  150.             try {
  151.                 if(!config.loadSlashsGlobal) {
  152.                     let guildId = guild.id;
  153.                     const token = client.token;
  154.                     const rest = new REST({ version: '10' }).setToken(token);
  155.                     (async () => {
  156.                         try {
  157.                             const data = await rest.put(
  158.                                 Routes.applicationGuildCommands(client.user.id, guildId),
  159.                                 { body: allCommands },
  160.                             );
  161.                    
  162.                             console.log(`${`Successfully`.bold.green} Loaded ${`(/)`.brightGreen} ${allCommands.length} Commands For: ${`${guild.name}`.brightRed}`);
  163.                         } catch (error) {
  164.                             console.log(`${`Unable`.bold.red} To Load ${`(/)`.brightGreen} ${allCommands.length} Commands For: ${`${guild.name}`.brightRed}`);
  165.                         }
  166.                     })();
  167.                 }
  168.             } catch (e) {
  169.                 console.log(String(e.stack).bgRed)
  170.             }
  171.         })
  172.     } catch (e) {
  173.         console.log(String(e.stack).bgRed)
  174.     }
  175. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement