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

Discord reaction role功能自定义emoji在embed消息显示ID如何解决?

问题解决方法

原因说明

Discord embed中要正确渲染自定义emoji,不能直接使用emoji的ID,需要使用固定格式<:自定义emoji名称:emojiID>(动态emoji用<a:自定义emoji名称:emojiID>,你当前直接将ID插入embed描述,所以只会显示纯文本ID。

修复步骤

方法一:通过服务器缓存获取emoji对象(更稳妥,无需手动拼格式)

  1. 替换自定义emoji定义逻辑
    原来的代码:
const RandomTeamEmoji = '889108655344091156';

替换为:

// 用ID直接从服务器emoji缓存中获取对象
const RandomTeamEmoji = message.guild.emojis.cache.get('889108655344091156');
// 要是拿不到也可以用emoji名称查找,替换下方的名称为你实际的自定义emoji名称
// const RandomTeamEmoji = message.guild.emojis.cache.find(e => e.name === '你的自定义emoji名称');

emoji对象调用toString时会自动生成符合渲染要求的格式,直接插入embed描述即可正常显示。

  1. 修改reaction事件的判断逻辑
    原来的判断条件是对比reaction.emoji.name和emoji ID,逻辑存在错误,需要替换为对比唯一的emoji ID:
    把messageReactionAdd和messageReactionRemove两个事件中所有
if (reaction.emoji.name === RandomTeamEmoji)

替换为

if (reaction.emoji.id === RandomTeamEmoji.id)

方法二:手动拼接emoji格式

如果你不想从缓存拉取,也可以手动拼接符合渲染要求的emoji字符串,同时单独存ID用于后续判断:

// 替换<:emoji名称:为你实际的自定义emoji名称,动态emoji前缀改为<a:
const RandomTeamEmoji = '<:emoji名称:889108655344091156>';
const RandomTeamEmojiId = '889108655344091156';

之后两个reaction事件的判断条件替换为:

if (reaction.emoji.id === RandomTeamEmojiId)

注意事项

自定义emoji必须和当前消息在同一个服务器,或者机器人拥有emoji所属服务器的访问权限,否则依然无法正常渲染。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 23:24:03