You need to enable JavaScript to run this app. discord.js中awaitReactions监听DM消息表情反应不生效问题
优惠活动
大模型
产品
解决方案
定价
更多

discord.js中awaitReactions监听DM消息表情反应不生效问题

问题修复方案
  • 缺少收集终止条件:当前仅配置了time参数,awaitReactions默认会等待整个计时周期结束才触发then回调,不会在收到符合条件的反应时立即执行。需要在配置项中添加max: 1,指定收集到1个符合条件的反应就立即终止流程触发回调。
  • 未过滤bot自身反应:你代码中自动给消息添加的👍会被计入收集范围,需要在过滤器中添加用户ID校验,仅响应接收DM的目标用户的操作。
  • 版本适配/权限问题:
    • 若使用discord.js v13及以上版本,awaitReactions的传参结构发生了变化,过滤器需要作为配置项的filter属性传入,而非单独的第一个参数;同时初始化Client实例时需要在intents中开启DIRECT_MESSAGE_REACTIONS,否则私信场景的反应事件无法被捕获。
    • 若使用v12及更早版本,保持过滤器单独传参即可,同时确认开启了对应私信反应权限。

修复后代码示例

discord.js v13+ 版本

member.send(currentEmbed).then(async (message) => {
  // 原有添加表情的循环逻辑不变
  for(var j = 0; j < dividers.length; j++) {
    var number = "";
    switch(dividers[j]) {
        case 1:
            number = "👍";
            break;
        case 2:
            number = "2️⃣";
            break;
        case 3:
            number = "3️⃣";
            break;
        case 4:
            number = "4️⃣";
            break;
        default:
            number = "";
            break;               
    }
    if(number) await message.react(number);
  }
  // 修改后的反应收集逻辑
  message.awaitReactions({
    filter: (reaction, user) => reaction.emoji.name === "👍" && user.id === member.id,
    max: 1,
    time: 150000
  }).then(collected => {
      console.log("TEST");
  });
});

discord.js v12及更早版本

member.send(currentEmbed).then(async (message) => {
  // 原有添加表情的循环逻辑不变
  for(var j = 0; j < dividers.length; j++) {
    var number = "";
    switch(dividers[j]) {
        case 1:
            number = "👍";
            break;
        case 2:
            number = "2️⃣";
            break;
        case 3:
            number = "3️⃣";
            break;
        case 4:
            number = "4️⃣";
            break;
        default:
            number = "";
            break;               
    }
    if(number) await message.react(number);
  }
  // 修改后的反应收集逻辑
  const filter = (reaction, user) => reaction.emoji.name === "👍" && user.id === member.id;
  message.awaitReactions(filter, {max: 1, time: 150000}).then(collected => {
      console.log("TEST");
  });
});

内容的提问来源于stack exchange,提问作者Kuno Claes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 16:36:06