自定义ID不符仍触发if条件?Discord票务菜单交互问题
问题排查:票务系统选择菜单事件逻辑错误
你的代码问题出在if条件的逻辑判断上,存在两个低级错误:
- 运算符优先级错误:
!的优先级高于===,导致!interaction.customId === 'staff_selection_menu'会先将interaction.customId转成布尔值取反,再和字符串'staff_selection_menu'做比较,这完全偏离了你“判断customId是否为目标值”的预期。 - 逻辑运算符与判断逻辑不匹配:你需要过滤掉「非选择菜单交互」和「customId不是staff_selection_menu的选择菜单」,但原代码的
||和取反逻辑组合后,反而让不符合条件的交互通过了判断。
修正后的代码
client.on('interactionCreate', async interaction => { console.log(interaction.customId); //remove // 先过滤非选择菜单,再过滤不符合目标customId的菜单 if(!interaction.isSelectMenu() || interaction.customId !== 'staff_selection_menu') return; console.log(`[${new Date().toLocaleTimeString()}] Staff ticket category received.`); // 后续业务代码... });
修正说明
- 先判断
!interaction.isSelectMenu():直接排除所有非选择菜单类型的交互 - 再通过
||连接interaction.customId !== 'staff_selection_menu':如果是选择菜单,但customId不是staff_selection_menu,也直接返回 - 只有当是选择菜单且customId完全匹配目标值时,才会执行后续的日志打印及业务逻辑
内容的提问来源于stack exchange,提问作者Aldoraz
相关产品推荐
相关产品推荐

