Discord.js V13加载slash commands报错ENOENT 找不到slash_commands目录求助
问题原因
报错ENOENT: no such file or directory, scandir './slash_commands'是Node.js找不到你代码中指定的slash_commands目录导致的,直接原因是路径不匹配,可按以下步骤排查修复:
修复方案
第一步:核对项目目录结构
你当前的项目根目录是报错信息里的C:\Users\codiene wrld\Desktop\dream(也就是index.js所在的目录),必须在这个目录下新建名为slash_commands的文件夹,注意名字完全匹配,不能有大小写偏差、多字少字,也不要放到handlers等其他子目录里。
同时你的加载逻辑是先读slash_commands下的子文件夹,再读取子文件夹里的js命令文件,所以不要直接把命令js文件放到slash_commands根目录,要在里面再建分类子文件夹(比如工具类、管理类),把命令文件放到对应子文件夹中。第二步:替换为绝对路径避免工作目录偏差
你代码中用的./开头的相对路径是相对于Node启动时的工作目录的,如果不是在项目根目录下启动脚本就会触发路径错误,建议用__dirname拼接绝对路径,不受启动位置影响,修改代码对应部分即可:
const { readdirSync } = require("fs"), path = require("path"), ascii = require("ascii-table"); let table = new ascii("Commands"); table.setHeading("Slash Commands", "Load status"); module.exports = (client) => { // 替换为绝对路径读取slash_commands目录 const slashRoot = path.join(__dirname, "../slash_commands"); readdirSync(slashRoot).forEach(dir => { const cmdPath = path.join(slashRoot, dir); const commands = readdirSync(cmdPath).filter(file => file.endsWith(".js")); for (let file of commands) { let pull = require(path.join(cmdPath, file)); client.slash_commands.set(pull.data.name, pull); table.addRow(file, '✅'); if (pull.aliases && Array.isArray(pull.aliases)) pull.aliases.forEach(alias => client.aliases.set(alias, pull.data.name)); } }); // 输出加载结果表格 console.log(table.toString()); }
额外修正了原代码的潜在问题:斜杠命令的名称存储在pull.data.name字段,原别名设置里写的pull.name是错误取值,上述代码已同步调整。
内容的提问来源于stack exchange,提问作者quvii
相关产品推荐
相关产品推荐

