diff --git a/commands/help.js b/commands/help.js new file mode 100644 index 0000000..c28311b --- /dev/null +++ b/commands/help.js @@ -0,0 +1,62 @@ +const { SlashCommandBuilder } = require("discord.js"); +const fs = require("fs"); + +module.exports = { + data: new SlashCommandBuilder() + .setName("help") + .setDescription("List all commands or info about a specific command") + .addStringOption(option => + option.setName("command") + .setDescription("The command to get info on") + .setRequired(false) + ), + permissionLevel: 0, + async execute(interaction) { + await interaction.deferReply(); + + //reply with a list of all commands + if (!interaction.options.getString("command")) { + let commands = []; + const commandFiles = fs.readdirSync('./commands').filter(file => file.endsWith('.js')); + for (const file of commandFiles) { + const command = require(`./${file}`); + if (!command.permissionLevel || command.permissionLevel < 2) { + commands.push(command.data.name); + } + } + interaction.editReply({ content: `Here's a list of all my commands: \n \`${commands.join('`, `')}\`` }); + return; + } + //reply with info about a specific command + else { + const commandName = interaction.options.getString("command"); + const command = interaction.client.commands.get(commandName); + if (!command) { + await interaction.editReply(`Command /${commandName} does not exist`); + } + else { + let reply = `Name: /${command.data.name}\n` + + `Description: ${command.data.description}\n`+ + `Permission Level: ${command.permissionLevel}\n`; + if (command.help) { + reply += `${command.help}\n`; + } + if (command.data.options) { + reply += `Options:\n`; + for (const option of command.data.options) { + reply += `\t${option.name}: ${option.description}\n`; + + if (option.type === "SUB_COMMAND") { + reply += `\t\tOptions:\n`; + for (const subOption of option.options) { + reply += `\t\t\t${subOption.name}: ${subOption.description}\n`; + } + } + } + } + + await interaction.editReply(reply); + } + } + } +}