Discord.js 自定义服务器表情在反应收集器中无响应问题求助
问题原因及修复方案
1. 直接导致无响应的代码错误
你代码中collect事件回调的第一行存在逻辑错误,访问了不存在的属性,会直接抛出异常中断后续逻辑,导致看起来收集器没有响应:
// 错误写法 reaction.emoji.reaction.users.remove(user.id);
reaction本身就是你当前触发的反应对象,不需要通过.emoji.reaction回溯获取,修正为:
// 正确写法 reaction.users.remove(user.id);
2. 易忽略的网关意图配置问题
如果你使用的是Discord.js v13及以上版本,必须在客户端初始化时开启GUILD_MESSAGE_REACTIONS网关意图,否则程序无法接收到服务器内的消息反应事件,收集器自然不会触发:
// 客户端初始化示例 const client = new Discord.Client({ intents: [ Discord.Intents.FLAGS.GUILDS, Discord.Intents.FLAGS.GUILD_MESSAGES, Discord.Intents.FLAGS.GUILD_MESSAGE_REACTIONS, // 必须添加该意图 // 其他你业务需要的意图 ] });
3. 可选优化点
- 你在数据库查询回调中重复调用了
nojobMsg.reactions.removeAll(),该操作进入switch分支后已经执行过一次,可以删掉重复调用避免冗余请求 - 建议给
collect事件回调添加try/catch捕获异常,方便后续排查其他问题 - SQL语句建议使用参数化查询,避免SQL注入风险,不要直接拼接用户ID到SQL语句中
内容的提问来源于stack exchange,提问作者Matsyui
相关产品推荐
相关产品推荐

