Estoy tratando de hacer un controlador de comandos en un bot de discord (con discord.js) pero cuando inicio el bot aparece un error:
ReferenceError: el comando no está definido
const discord = require('discord.js'); const intents = new discord.Intents(); const client = new discord.Client({ intents: 32767 }); const fs = require('fs'); const { readdirSync } = require('fs'); client.commands = new discord.Collection(); const commandFiles = fs.readdirSync('./comandos').filter(file => file.endsWith('.js')); for(const file of commandFiles){ const command = require(`./comandos/${file}`); client.commands.set(command.name, command); } let cmd = client.commands.find((c) => c.name === command || c.alias && c.alias.includes(command)); if(!cmd){ cmd.execute(client, message, args); } else { if(!cmd){ return; } } const config = require('./config.js'); const prefix = config.prefix; client.login(config.token);Eso debe estar en un evento messageCreate :
client.on("messageCreate", message => { const [ command, ...args ] = message.content.split(/ +/g); let cmd = client.commands.get(command) || client.commands.find((c) => c.alias?.includes(command)); if (cmd) { //you also made a mistake here, remove the "!" cmd.execute(client, message, args); } })El problema es que estás usando const para definir el command dentro del ciclo. Debe reemplazarlo con var y debería funcionar bien:
const discord = require('discord.js'); const intents = new discord.Intents(); const client = new discord.Client({ intents: 32767 }); const fs = require('fs'); const { readdirSync } = require('fs'); client.commands = new discord.Collection(); const commandFiles = fs.readdirSync('./comandos').filter(file => file.endsWith('.js')); for(const file of commandFiles){ var command = require(`./comandos/${file}`); client.commands.set(command.name, command); } let cmd = client.commands.find((c) => c.name === command || c.alias && c.alias.includes(command)); if(!cmd){ cmd.execute(client, message, args); } else { if(!cmd){ return; } } const config = require('./config.js'); const prefix = config.prefix; client.login(config.token);(Usar "let" tampoco funcionará porque no está en el alcance global).