Discord.js v12 messageReactionAdd事件读取channel属性报错如何解决
问题原因与修改方案
错误根源
messageReactionAdd事件原生仅返回reaction、user两个参数,你自行添加的第三个参数message属于未定义变量,因此访问message.channel直接触发类型错误。反应绑定的消息需要从reaction.message属性获取。- 原有频道判断的逻辑运算符优先级错误:
!的优先级高于===,会先对属性值取反得到布尔值,再和频道ID字符串做全等判断,逻辑永远不成立,需要调整判断写法。
修复后基础代码
client.on('messageReactionAdd', (reaction, user) => { // 过滤机器人用户 if(user.bot) return; // 从reaction对象获取关联消息,判断频道ID if(reaction.message.channel.id !== "915245191911309383") return; console.log("ADD"); // 后续业务逻辑 })
兼容未缓存消息的升级代码
如果需要监听机器人上线前发送的消息的反应事件,需要先手动拉取未缓存的消息数据:
client.on('messageReactionAdd', async (reaction, user) => { if(user.bot) return; // 若消息未缓存则主动拉取 if(reaction.partial) { try { await reaction.fetch(); } catch (error) { console.error('拉取反应关联消息失败:', error); return; } } if(reaction.message.channel.id !== "915245191911309383") return; console.log("ADD"); })
内容的提问来源于stack exchange,提问作者Georg Inferno
相关产品推荐
相关产品推荐

