Estoy tratando de agregar un controlador de comandos a mi bot, sin embargo, solo funciona un comando y no importa cómo cambie el comando, no se actualiza. Aquí está mi código.
Esto está en la parte superior debajo de los paquetes y encima del código listo.
fs.readdir('./commands/', (_err, files) => { files.forEach((file) => { if (!file.endsWith('.js')) return; bot.commands = new Discord.Collection() let command = require(`./commands/${file}`); // access all details though this variable bot.commands.set(command.name, command); console.log(`👌 Command loaded: ${command.name}`); }); });Esto está en el comando de recursos.
const Discord = require("discord.js") const fs = require("fs") module.exports = { name: 'resources', // any other details you might like, such as: description: 'Shows resources', execute(bot, message, args, prefix) { // the actual function let resourceText = fs.readFileSync('txtfiles/resources.txt', 'utf8') message.suppressEmbeds(true) message.channel.send(resourceText) } }El comando de recursos funciona bien, pero el comando de envío no.
const Discord = require("discord.js") const fs = require("fs") module.exports = { name: 'ship', // any other details you might like, such as: description: 'ships people', execute(bot, message, args, prefix) { // the actual function message.channel.send("please work") } }Y esto está en la cosa "on messageCreate"
if(cmd===`${prefix}resources`){bot.commands.get('resources').execute(bot, message, args, prefix);} if(cmd===`${prefix}ship`){bot.commands.get('ship').execute(bot, message, args, prefix);}He intentado poner estos debajo de los paquetes.
delete require.cache['./index.js']; delete require.cache[require.resolve('./index.js')] Sin embargo, recibo este mensaje de error Unhandled promise rejection: TypeError: Cannot read properties of undefined (reading 'execute')
El comando de recursos funciona bien, incluso si eliminamos todo el código del archivo, y el comando de envío no funciona en absoluto.
Entonces, en lugar de poner un bloque if (cmd === para cada comando, intente usar uno dinámico que no requiera que actualice su sección messageCreate , cada vez que agregue un nuevo comando o elimine uno.
Sección MessageCreate:
bot.on('messageCreate', async message => { if (message.author.bot) return if (!message.content.startsWith(config.prefix)) return const args = message.content.slice(config.prefix.length).trim().split(/ +/) const command = args.shift().toLowerCase() const cmd = bot.commands.get(command) if (!cmd) { console.log("Unknown command") return } else { cmd.run(bot, message, args) } })Luego, tendrá que actualizar su comando existente que funciona para que coincida con este estilo, pero simplemente haga otros nuevos como este:
module.exports = { name: 'Command Name', description: 'Command description', run: async (bot, message, args) => { // the actual function } } Entonces el comando de tu ships se vería así
module.exports = { name: 'ships', description: 'ships people', run: async (bot, message, args) => { message.channel.send({ content: 'Please work' }) } }Cambiaría tu colección de comandos a esto
bot.commands = new Discord.Collection() const commandList = [] const commands = fs.readdirSync('./commands/').filter(file => file.endsWith('.js')) for (const file of commands) { const command = require(`./commands/${file}`) commandList.push(`${file.split('.'[0])}`) bot.commands.set(command.name, command) } console.log(`👌 Commands loaded: ${commandList}`)