You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 02:36:05