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

Discord.js 如何为同一条Embed消息重复添加相同emoji反应

问题原因
  • Discord平台存在原生硬限制:同一条消息下的相同emoji反应会被聚合为单个入口展示,单个用户对同一个emoji仅能添加1次反应,重复触发添加操作会直接取消已存在的对应反应,完全不可能实现3个相同🍎反应并排展示的效果,该规则手动操作官方客户端即可验证,和代码实现无关。
  • 现有代码存在两处逻辑问题:
    1. 采用Promise.all并发发起3个添加反应的请求,Discord API要求同一条消息的反应操作必须按顺序处理,并发发送的重复请求会被服务端直接拦截丢弃,仅第一个到达的请求能正常生效。
    2. 未拦截机器人自身触发的反应事件:回调函数中主动执行message.react()的操作,会再次触发messageReactionAdd事件,形成无限递归调用,极易触发API速率限制导致操作被拦截。
修正方案

如果需求是给消息添加多个不同emoji的反应,将并发请求改为串行执行,同时增加机器人身份判断阻断递归逻辑即可,参考代码如下:

client.on("messageReactionAdd", async (reaction, user) => {
    console.log(reaction.emoji)
    const message = reaction.message;
    const embeds = message.embeds;
    // 无嵌入内容、非消息作者触发、机器人自身触发的事件全部直接拦截
    if(!embeds.length || user.id !== message.author.id || user.bot) return;

    const firstEmbed = embeds[0];
    // 等待上一个反应添加完成后,再执行下一个添加操作
    await message.react('🍎');
    await message.react('🍊');
    await message.react('🍇');
});

注意:不要尝试重复添加相同emoji的反应,该操作受平台规则限制,没有任何绕过实现的可能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 21:36:42