Discord.js v14.9.0中interaction.isCommand()报错:不是函数的原因
Discord.js v14.9.0中interaction.isCommand()报错及reply实现方案
问题原因
你通过client.ws.on('INTERACTION_CREATE')监听的是原始WebSocket事件,这里拿到的interaction是未经过Discord.js封装的原始数据结构,所以不存在isCommand()方法,也无法直接调用reply()。Discord.js v14要求通过客户端的interactionCreate事件来处理交互逻辑,该事件传递的是封装好的Interaction实例,具备官方文档中定义的所有方法。
正确代码示例
client.on('interactionCreate', async (interaction) => { // v14中已废弃isCommand(),改用isChatInputCommand()判断Slash命令 if (!interaction.isChatInputCommand()) return; // 执行回复操作 try { await interaction.reply('命令已响应!'); } catch (error) { console.error('回复失败:', error); } });
额外注意事项
- 确保你的机器人已经完成了Slash命令的注册,否则
interactionCreate事件不会触发命令相关的交互 - 所有与交互相关的异步操作(比如
reply())建议用try/catch包裹,避免未处理的错误导致机器人崩溃 - 如果需要处理其他类型的交互(如按钮、选择菜单),可以使用对应的判断方法,比如
interaction.isButton()、interaction.isStringSelectMenu()
内容的提问来源于stack exchange,提问作者Anatolii Ivanov
相关产品推荐
相关产品推荐

