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
相关产品推荐
相关产品推荐

