Estoy tratando de crear un bot de moderación y encuentro un error que muestra que no tengo comandos y establezco el archivo de bienvenida en mi proyecto, incluso cuando los tengo. Aquí está el error completo:
node:internal/fs/utils:344 throw err; ^ Error: ENOTDIR: not a directory, scandir './commands/setWelcome.js' at Object.readdirSync (node:fs:1390:3) at Object.<anonymous> (/home/runner/Him/index.js:12:26) at Module._compile (node:internal/modules/cjs/loader:1095:14) at Object.Module._extensions..js (node:internal/modules/cjs/loader:1147:10) at Module.load (node:internal/modules/cjs/loader:975:32) at Function.Module._load (node:internal/modules/cjs/loader:822:12) at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12) at node:internal/main/run_main_module:17:47 { errno: -20, syscall: 'scandir', code: 'ENOTDIR', path: './commands/setWelcome.js' }Aquí está mi código en index.js -
const fs = require('fs'); const Discord = require('discord.js'); const client = new Discord.Client({ intents: ["GUILDS", "GUILD_MESSAGES"] }); client.commands = new Discord.Collection(); const commandFolders = fs.readdirSync('./commands'); for (const folder of commandFolders) { const commandFiles = fs.readdirSync(`./commands/${folder}`).filter(file => file.endsWith('.js')); for (const file of commandFiles) { const command = require(`./commands/${folder}/${file}`); client.commands.set(command.name, command); } } client.once('ready', (c) => { console.log(`Logged in as ${c.user.tag}`); }); client.on('messageCreate', message => { //My command handler code here }); client.login(process.env.TOKEN);y mi archivo setWelcome.js está completamente vacío
Aquí está mi directorio de proyectos:
index.js//file commands//folder and then inside commands setWelcome.js //filey sí, tengo archivos package.json y package-lock.json. Estaría muy agradecido a cualquiera que me ayude, ¡Gracias! por cierto... estoy usando repl.it para este proyecto
Parece que está tratando de recorrer su carpeta de dos maneras contradictorias (está usando dos bucles for anidados). Esto tendría sentido si la carpeta de commands contuviera subcarpetas que contuvieran los archivos a los que desea dirigirse. Sin embargo, dado que sus archivos de comandos están directamente dentro de su carpeta de commands , un bucle será suficiente.
La función readdirSync espera una ruta a un directorio y devuelve una lista de su contenido como se describe en la documentación de fs , pero ./commands/${folder} ya es una ruta a un archivo dentro de la carpeta de commands . Lo siguiente debería ayudar:
\\create a list of files in command directory that end with .js const commandFiles = fs.readdirSync(`./commands/`).filter(file => file.endsWith('.js')); \\loop over items in the list for (const file of commandFiles) { const command = require(`./commands/${file}`); client.commands.set(command.name, command); } Nota: Tal vez se deba omitir la barra invertida final en ./commands/ . Por favor comente si es así.