Discord.js斜杠命令CommandInteraction突然失效getMember不是函数报错求助
报错根本原因:命令执行时的参数传递顺序不匹配
你在interactionCreate事件处理器中调用命令execute方法的参数顺序,和你命令文件里定义的execute方法接收参数的顺序完全相反:
- 事件处理器中调用代码:
command.execute(interaction, client, arguments),参数顺序为「交互对象 → 客户端实例 → 参数数组」 - 你ban命令的
execute方法定义:async execute(client, interaction, permission),参数顺序为「客户端实例 → 交互对象 → 权限参数」
这就导致你在ban命令代码里使用的interaction变量,实际接收到的值是Discord客户端实例,客户端实例本身不存在options.getMember方法,因此触发报错。
你提到距离上次正常运行仅间隔5分钟,大概率是这段时间内你调整了事件处理器或者命令的参数顺序,没有同步修改对应代码导致。
修复方案
二选一即可:
- 调整命令文件的参数接收顺序,和调用侧保持一致:
// 把ban命令的execute参数改成如下顺序即可 async execute(interaction, client, args) { const Target = interaction.options.getMember('target') // 其余业务代码不变 }
- 调整事件处理器的调用顺序,和命令定义的参数顺序保持一致:
// 把interactionCreate里的调用代码改成如下 command.execute(client, interaction, arguments);
额外可优化点
- 事件处理器里你声明了和函数内置关键字重名的
arguments变量,容易引发不可预期的问题,建议修改为args等其他名称 - 调用
interaction.followUp前需要先调用interaction.deferReply,否则会触发交互未响应的报错
内容的提问来源于stack exchange,提问作者Ekhi Arzac
相关产品推荐
相关产品推荐

