Creé un pequeño controlador de comandos con un simple comando "ping". Sin embargo, intentar acceder a message.channel aparece sin definir. ¿Por qué es esto?
./index.js
//Discord, fs, prefix, client etc. declarations client.commands = new Collection() const files = fs.readdirSync("./commands").filter(file => file.endsWith(".js") for (const file of files) { const command = require(`./commands/${file}`) client.commands.set(command.name, command) } client.on("messageCreate", message => { const [command, ...args] = message.content.slice(prefix.length).split(/ +/g) if (client.commands.has(command) { client.commands.get(command).execute(message, client, args) } }) client.login(/*token*/) ./commands/ping.js
module.exports = { name: "ping", description: "Make me say pong", async execute(client, message, args) { message.channel.send("Pong!") } }Si bien Message.channel puede ser válido, message no es una instancia de Message . En realidad, es una instancia de Client . El orden de los argumentos siempre importa, y ponerlos en el orden incorrecto puede generar TypeErrors. Hay 1 solución simple aquí
¡Haz los argumentos en el orden correcto! Puede cambiar la ejecución o la declaración.
client.commands.get(command).execute(client, message, args)Esto es muy común y sucede por algo más que enviar mensajes a los canales.