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

Discord每日早9点定时消息机器人表情点击无响应问题求助

解决Discord机器人表情交互无响应的问题

嘿,我仔细看了你的代码,很快就找到了问题所在!下面帮你一步步排查和修复:

核心问题:过滤条件逻辑错误

你设置的过滤器filter里有个关键bug:

user.id === message.author.id

因为message是你的机器人发送的消息,message.author.id对应的是机器人自己的ID。这就意味着只有机器人自己点击表情时才会触发后续逻辑,用户点击自然不会有任何响应啦!

修复步骤

1. 修正过滤器逻辑

把过滤条件改成排除机器人用户,确保只有真实用户的点击会被监听:

const filter = (reaction, user) => {
  // 使用标准👍 emoji(避免显示/匹配异常),并排除机器人账号
  return ['👍'].includes(reaction.emoji.name) && !user.bot;
};

另外注意:你原来用的可能是显示异常的emoji,换成标准的Unicode emoji 👍(U+1F44D)可以避免表情名称匹配失败的问题。

2. 异步处理表情添加

message.react()是异步操作,最好加上await,确保表情完全添加到消息后再开始监听反应,避免用户提前点击但监听还未生效的情况:

await message.react('👍');

3. 完整修正后的代码

var rule = new schedule.RecurrenceRule();
rule.hour = 9;
rule.minute = 0;
rule.tz = 'Europe/Paris';
schedule.scheduleJob(rule, async function() {
  var question = await getQuestion();
  const message = await client.channels.cache.get(process.env.CHANNEL_ID).send(`**hello @everyone The wake up question.** \n${question}`);
  // 等待表情添加完成后再开始监听
  await message.react('👍');
  const filter = (reaction, user) => {
    return ['👍'].includes(reaction.emoji.name) && !user.bot;
  };
  message.awaitReactions(filter, { max: 1, time: 60000, errors: ['time'] })
    .then(collected => {
      const reaction = collected.first();
      if (reaction.emoji.name === '👍') {
        console.log("用户点击了点赞表情!");
      }
    })
    .catch(err => {
      // 添加错误捕获,方便调试超时或异常情况
      console.log("指定时间内无用户点击表情,或发生错误:", err);
    });
});

额外建议

  • 给awaitReactions加上catch块,方便调试超时或其他错误情况
  • 确保你的机器人拥有ReadMessageHistory和AddReactions权限,这些是监听表情反应的必要权限

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 10:27:41