You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 23:45:05