Discord reaction role功能自定义emoji在embed消息显示ID如何解决?
问题解决方法
原因说明
Discord embed中要正确渲染自定义emoji,不能直接使用emoji的ID,需要使用固定格式<:自定义emoji名称:emojiID>(动态emoji用<a:自定义emoji名称:emojiID>,你当前直接将ID插入embed描述,所以只会显示纯文本ID。
修复步骤
方法一:通过服务器缓存获取emoji对象(更稳妥,无需手动拼格式)
- 替换自定义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描述即可正常显示。
- 修改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
相关产品推荐
相关产品推荐

