discord.js 12调用$eval命令报execute is not a function错误
问题排查结果与解决方案
你的报错核心是命令导出的方法定义和入口调用逻辑不匹配,具体原因和修复方案如下:
根因说明
- 方法名不匹配:你在eval命令文件中导出的执行函数命名为
run,但在index.js的消息处理逻辑中,调用命令时用的是.execute()方法,二者名称不一致导致找不到对应函数,触发类型错误。 - 参数传递错误:eval命令的
run方法定义的入参顺序是(client, message, args),但index.js调用时只传入了(message, args),漏掉了client参数,即便改对方法名也会产生后续逻辑错误。
修复方案
方案1(推荐:统一所有命令的方法命名)
- 修改eval命令文件的导出属性名,将
run: async (client, message, args) => {修改为execute: async (client, message, args) => { - 修改index.js中的命令调用逻辑,将
client.commands.get(command).execute(message, args);修改为client.commands.get(command).execute(client, message, args);,补全传递的client参数。
方案2(适配现有eval命令的命名)
直接修改index.js中的命令调用逻辑,将client.commands.get(command).execute(message, args);修改为client.commands.get(command).run(client, message, args);即可。
可选优化建议
你可以在eval命令的catch块中把错误信息加入返回的embed描述里,方便排查eval执行过程中的问题,示例:
catch (e) { const embed = new MessageEmbed() .setTitle('An Error has occured') .setDescription(`\`\`\`${e.stack}\`\`\`) return await msg.edit(embed); }
内容的提问来源于stack exchange,提问作者ignshifts
相关产品推荐
相关产品推荐

