如何修复Discord.js中cmds命令无法正常生成指令列表Embed的问题
问题修复方案
现有代码错误点
- 语法错误:
embed.addField()中包裹描述的反引号使用错误,JS 不允许直接在方法参数中写裸的三个反引号,需要将反引号作为字符串内容拼接 - 路径读取错误:
fs.readdirSync('.')读取的是 Node 进程的工作目录,不是命令文件所在的目录,会误加载非命令的 JS 文件(如入口 index.js),导致读取不到name/description字段报错 - 逻辑冗余:启动 Bot 时已经将所有命令挂载到
client.commands集合,不需要重复读文件加载命令,直接遍历集合即可,同时避免了重复加载、路径错误等问题 - 字段类型错误:
aliases字段通常配置为数组,空配置建议写空数组而非空字符串,避免后续处理别名时报错
修复后完整代码
module.exports = { name: 'cmds', description: '展示所有可用命令', aliases: [], execute(client, msg, args, blacklisted) { const { MessageEmbed } = require("discord.js") const embed = new MessageEmbed() const author = msg.author if (blacklisted.includes(author.id)) { return msg.reply(`你已被列入机器人使用黑名单,如果你认为这是误判,请联系机器人所有者。`) } // 直接遍历已挂载的命令集合,无需重复读文件 for (const [cmdName, command] of client.commands) { embed.addField(cmdName, `\`\`\`${command.description || '无描述'}\`\`\``) } embed.setTitle(`命令列表`) embed.setColor('RANDOM') msg.reply({ embeds: [embed] }) } }
额外优化说明
- 提前判断黑名单,命中后直接返回,避免执行多余的 Embed 构建逻辑
- 增加描述字段兜底,防止部分命令未写 description 字段时报错
- 移除无用冗余变量
user、useronly和getCommand函数,精简代码
内容的提问来源于stack exchange,提问作者dimondflash57
相关产品推荐
相关产品推荐

