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

Discord.js v12 如何实现用户对embed消息添加反应时发送用户名到频道

解决方法

你当前使用的awaitReactions方法默认会等收集满2个符合过滤条件的反应/超时后才会触发then回调,如果直接在回调里处理是一次性返回所有收集到的反应。根据你的需求,以下是两种可直接使用的实现方案:

方案1:实时触发(每次用户加反应就立刻发送用户名)

需要先给目标消息绑定messageReactionAdd事件监听,收集结束后销毁监听避免内存泄漏,完整修改后的代码如下:

async function fun_2p() {
  const reactionMessage2p = await message.channel.send(embed2p);
  const filter2p = (reaction, user) => user.id !== bot;

  await reactionMessage2p.react('🍻')

  // 绑定反应添加事件,实时处理新增反应
  const handleReactionAdd = (reaction, user) => {
    // 过滤机器人自己的反应,仅处理目标表情
    if (user.id !== bot && reaction.emoji.name === '🍻') {
      message.channel.send(`用户 ${user.username} 添加了反应`);
    }
  }
  reactionMessage2p.on('messageReactionAdd', handleReactionAdd);

  reactionMessage2p.awaitReactions( filter2p, {max: 2, time: 20000, errors: ['time'] })
  .then(collected => {
    // 收集完成后销毁事件监听,避免内存泄漏
    reactionMessage2p.off('messageReactionAdd', handleReactionAdd);
    // 此处可添加收集完成后的其他业务逻辑
  })
  .catch(err => {
    // 超时场景同样销毁监听,避免内存泄漏
    reactionMessage2p.off('messageReactionAdd', handleReactionAdd);
  })
}

方案2:收集满2个反应后统一发送所有参与用户

如果你不需要实时触发,只是收集完所有符合条件的反应后统一输出用户名,直接在then回调里遍历收集到的反应即可,代码如下:

async function fun_2p() {
  const reactionMessage2p = await message.channel.send(embed2p);
  const filter2p = (reaction, user) => user.id !== bot;

  await reactionMessage2p.react('🍻')

  reactionMessage2p.awaitReactions( filter2p, {max: 2, time: 20000, errors: ['time'] }).then(collected => {
    // 遍历收集到的反应,取出所有参与的用户
    collected.first().users.cache.forEach(user => {
      if (user.id !== bot) {
        message.channel.send(`参与用户:${user.username}`);
      }
    })
  })
  .catch(err => {
    message.channel.send('等待反应超时,已结束收集');
  })
}

注意事项

  • discord.js v12的awaitReactions返回的collected是Collection类型,如果你只监听单个表情,用collected.first()就能拿到对应表情的反应对象
  • 记得补充超时的catch分支处理,避免未捕获的报错导致机器人崩溃

内容的提问来源于stack exchange,提问作者emirate.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 06:15:08