From 2701df63321a5613adf168cbc0e1eea1bffd7ce5 Mon Sep 17 00:00:00 2001 From: baz Date: Fri, 17 Nov 2023 23:23:51 +0000 Subject: [PATCH] Add command handling in main --- index.js | 50 +++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 49 insertions(+), 1 deletion(-) diff --git a/index.js b/index.js index e0803c4..40ce374 100644 --- a/index.js +++ b/index.js @@ -1,10 +1,58 @@ // Require the necessary discord.js classes -const { Client, Events, GatewayIntentBits } = require('discord.js'); +const fs = require('node:fs'); +const path = require('node:path'); +const { Client, Collection, Events, GatewayIntentBits } = require('discord.js'); const { token } = require('./config.json'); // Create a new client instance const client = new Client({ intents: [GatewayIntentBits.Guilds] }); +client.commands = new Collection(); + +const foldersPath = path.join(__dirname, 'commands'); +const commandFolders = fs.readdirSync(foldersPath); + +for (const folder of commandFolders) { + const commandsPath = path.join(foldersPath, folder); + const commandFiles = fs.readdirSync(commandsPath).filter(file => file.endsWith('.js')); + + for (const file of commandFiles) { + const filePath = path.join(commandsPath, file); + const command = require(filePath); + + // Set a new item in the collection with the key as the command name and the value as the exported module + if ('data' in command && 'execute' in command) { + client.commands.set(command.data.name, command); + } else { + console.log('[WARNING] The command at ${filePath} is missing a required "data" or "execute" property.'); + } + } +} + +client.on(Events.InteractionCreate, async interaction => { + if (!interaction.isChatInputCommand()) return; + + console.log(interaction); + + const command = client.commands.get(interaction.commandName); + + if (!command) { + console.error('No command matching ${interaction.commandName} was found.'); + return; + } + + try { + await command.execute(interaction); + } catch (error) { + console.error(error); + if (interaction.replied || interaction.deferred) { + await interaction.followUp({ content: 'There was an error while executing the command!', ephemeral: true }); + } else { + await interaction.reply({ content: 'There was an error while executing this command!', ephemeral: true }); + } + } +}); + // When the client is ready, run this code (only once) // We use 'c' for the event parameter to keep it separate from the already defined 'client' client.once(Events.ClientReady, c => {