discord.js机器人ban/kick命令报execute未定义错误如何解决?
discord.js 命令无法执行问题解决方案
问题根因
你在向client.commands集合注册命令时,使用的是模块导出的name字段作为集合的键。你编写的ban命令模块导出的name为大写开头的Ban,但主文件中调用命令时使用全小写的ban作为键去查找,集合中没有对应键的内容,返回undefined,调用execute方法时就会抛出TypeError: Cannot read property 'execute' of undefined报错。
可正常运行的help命令name字段和调用时的键均为全小写help,完全匹配,因此可以正常执行。
解决方案
提供两种可直接落地的修复方案,二选一即可:
- 方案一:统一命令名大小写规范,将所有命令模块的
name字段改为全小写,和主文件调用时的键保持一致
修改后的ban命令模块代码如下:
module.exports = { name: 'ban', // 原大写开头的Ban改为全小写ban description: "Bans members", execute (message, args) { message.channel.send('test') } }
kick命令按照相同规则修改name字段即可。
- 方案二:保持命令模块
name字段的大写写法,同步修改主文件中调用时的键,保证完全匹配
主文件对应代码修改如下:
} else if (command === 'ban') { client.commands.get('Ban').execute(message, args); } else if (command === 'kick') { client.commands.get('Kick').execute(message, args); }
优化建议
为了从根源避免大小写不匹配问题,可在命令注册和匹配阶段统一做小写转换:
- 注册命令时统一将
name转小写:client.commands.set(command.name.toLowerCase(), command) - 匹配用户输入的命令时先转小写再判断
修改完成后无论用户输入的是Ban、BAN还是ban,都可以正常匹配到对应命令。
内容的提问来源于stack exchange,提问作者A code
相关产品推荐
相关产品推荐

