Cuando trato de empujar los comandos de barra diagonal de mi bot a una matriz que quiero usar para registrar mis comandos, no parece que se empuje, ya que cuando console.log la matriz, devuelve una matriz vacía. Pero cuando registro cada comando individualmente, se registra correctamente. ¿Por qué?
Aquí está el código que uso para enviar los comandos de mi bot a la matriz:
const commands = [] fs.readdirSync("./commands").forEach(dir => { fs.readdir(`./commands/${dir}`, (err, files) => { if (err) throw err; const jsFiles = files.filter(file => file.endsWith(".js")); if (jsFiles.length <= 0) return console.log("[COMMAND HANDLER] - Cannot find any commands!"); jsFiles.forEach(file => { const command = require(`./commands/${dir}/${file}`); commands.push(command) }); console.log(commands) module.exports = commandsLa función readdir es asíncrona. Si desea utilizar este código con cambios mínimos, reemplácelo con readdirSync .
Aquí están los documentos con más información: https://nodejs.org/api/fs.html#fsreaddirsyncpath-options
Reemplace esto:
fs.readdirSync("./commands").forEach(dir => { fs.readdir(`./commands/${dir}`, (err, files) => { if (err) throw err; const jsFiles = files.filter(file => file.endsWith(".js")); if (jsFiles.length <= 0) return console.log("[COMMAND HANDLER] - Cannot find any commands!"); jsFiles.forEach(file => { const command = require(`./commands/${dir}/${file}`); commands.push(command) });con este:
const cmdDirectories = fs.readdirSync(`./commands`) for (const dir of cmdDirectories) { const cmdFiles = fs.readdirSync(`./commands/${dir}`).filter(file => file.endsWith(".js")); if (cmdFiles.length <= 0) return console.log("[COMMAND HANDLER] - Cannot find any commands!"); for (const file of cmdFiles) { const command = require(`./commands/${dir}/${file}`); commands.push(command) } }Esta solución se encontró puramente por experimentación, no sé cómo/por qué funcionó. Si alguien sabe cómo/por qué funcionó esto, por favor deje un comentario.