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

discord.js自定义emoji反应角色增删失效问题解决方法

故障原因

自定义emoji的判断逻辑存在取值错误:

  • 普通Unicode emoji没有专属ID,reaction.emoji.id值为null,可以直接通过reaction.emoji.name匹配emoji字符本身,所以✅对应的判断分支能正常运行
  • 自定义服务器emoji的reaction.emoji.id存储的是纯数字格式的emoji ID,原代码里用来比对的是完整emoji字符串<:female:996009905720918076>,和实际存储的纯数字ID永远无法相等,所以对应分支始终不触发。
修复方案
  • 提取自定义emoji的纯数字ID:从完整emoji串里取出最后一段数字996009905720918076,作为判断的比对值
  • 建议将两个独立的if判断改为if...else if结构,减少无意义的重复判断
  • 可选优化:用guild.members.fetch()替代直接读缓存拿成员,避免成员未加载到缓存时触发报错
修复后代码
if (reaction.emoji.name === "✅") {
  const member = await reaction.message.guild.members.fetch(user.id);
  await member.roles.add("996019880765702154");
  await reaction.users.remove(user.id);
} 
else if (reaction.emoji.id === "996009905720918076") {
  const member = await reaction.message.guild.members.fetch(user.id);
  await member.roles.add("996020079420510208");
  await reaction.users.remove(user.id);
}

补充说明:如果是动态自定义emoji(格式为<a:表情名:数字ID>),判断逻辑完全一致,只需要比对reaction.emoji.id对应的纯数字ID即可,不需要拼接前缀格式串。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 12:03:25