diff --git a/commands/ping.js b/commands/ping.js new file mode 100644 index 0000000..9a1e202 --- /dev/null +++ b/commands/ping.js @@ -0,0 +1,10 @@ +const { SlashCommandBuilder } = require('@discordjs/builders'); + +module.exports = { + data: new SlashCommandBuilder() + .setName('ping') + .setDescription('Pings caller!'), + async execute(interaction) { + await interaction.reply(`Ping! <@${interaction.user.id}>`); + }, +}; \ No newline at end of file diff --git a/commands/server.js b/commands/server.js new file mode 100644 index 0000000..7ac6553 --- /dev/null +++ b/commands/server.js @@ -0,0 +1,10 @@ +const { SlashCommandBuilder } = require('@discordjs/builders'); + +module.exports = { + data: new SlashCommandBuilder() + .setName('server') + .setDescription('Provides server information.'), + async execute(interaction) { + await interaction.reply(`Server name: ${interaction.guild.name}\nTotal members: ${interaction.guild.memberCount}`); + }, +}; \ No newline at end of file diff --git a/commands/user.js b/commands/user.js new file mode 100644 index 0000000..1cde2da --- /dev/null +++ b/commands/user.js @@ -0,0 +1,10 @@ +const { SlashCommandBuilder } = require('@discordjs/builders'); + +module.exports = { + data: new SlashCommandBuilder() + .setName('user') + .setDescription('Provides user information.'), + async execute(interaction) { + await interaction.reply(`Your tag: ${interaction.user.tag}\nYour id: ${interaction.user.id}`); + }, +}; \ No newline at end of file diff --git a/deploy-commands.js b/deploy-commands.js index 98e7f13..62e191f 100644 --- a/deploy-commands.js +++ b/deploy-commands.js @@ -1,14 +1,18 @@ -const { SlashCommandBuilder } = require('@discordjs/builders'); +const fs = require('node:fs'); +const path = require('node:path'); const { REST } = require('@discordjs/rest'); const { Routes } = require('discord-api-types/v9'); const { clientId, guildId, token } = require('./config.json'); -const commands = [ - new SlashCommandBuilder().setName('ping').setDescription('Replies with pong!'), - new SlashCommandBuilder().setName('server').setDescription('Replies with server info!'), - new SlashCommandBuilder().setName('user').setDescription('Replies with user info!'), -] - .map(command => command.toJSON()); +const commands = []; +const commandsPath = path.join(__dirname, 'commands'); +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); + commands.push(command.data.toJSON()); +} const rest = new REST({ version: '9' }).setToken(token); diff --git a/index.js b/index.js index c22c368..20953a7 100644 --- a/index.js +++ b/index.js @@ -1,14 +1,45 @@ +const fs = require('node:fs'); +const path = require('node:path'); + // Require the necessary discord.js classes -const { Client, Intents } = require('discord.js'); +const { Client, Collection, Intents } = require('discord.js'); const { token } = require('./config.json'); // Create a new client instance const client = new Client({ intents: [Intents.FLAGS.GUILDS] }); +client.commands = new Collection(); +const commandsPath = path.join(__dirname, 'commands'); +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 + client.commands.set(command.data.name, command); +} + // When the client is ready, run this code (only once) client.once('ready', () => { console.log('Ready!'); }); +client.on('interactionCreate', async interaction => { + if (!interaction.isCommand()) return; + + const command = client.commands.get(interaction.commandName); + + if (!command) return; + + try { + await command.execute(interaction); + } + catch (error) { + console.error(error); + await interaction.reply({ content: 'There was an error while executing this command!', ephemeral: true }); + } +}); + // Login to Discord with your client's token client.login(token); \ No newline at end of file