You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Discord.js中message.react添加特定Unicode表情失败问题排查

解决Discord.js中添加:one::two:表情时的Unknown Emoji错误

嘿,我之前刚踩过几乎一样的坑,来给你理清楚问题出在哪,以及怎么搞定它:

错误的核心原因

你用的:one::two:这种带冒号的写法,是Discord客户端的快捷输入 shorthand,但Discord API根本不买这个账!API只认三种合法的表情参数格式:

  • 原生Unicode表情字符(比如直接用1️⃣2️⃣,而不是:one:
  • 自定义表情的完整标识:<:表情名称:表情ID>(动态GIF表情要加前缀a:,比如<a:spin:123456789>
  • 哪怕是Discord自带的系统表情,也必须套进上面的格式里,单独传一串ID数字完全没用

你说用表情ID也不行,大概率是只传了裸ID(比如422515569623957504),但API需要的是带格式的完整标识,单独的ID它根本识别不了。而你测试的能生效,是因为那本身就是一个原生Unicode表情字符,不是冒号格式的快捷写法。

两种可行的解决办法

方法1:直接用Unicode表情字符

这是最省心的方式,直接把:one:对应的Unicode字符1️⃣:two:对应的2️⃣:three:对应的3️⃣粘贴到代码里就行,API能直接识别:

// 假设你已经发送了投票消息,存在pollMessage变量中
await pollMessage.react("1️⃣");
await pollMessage.react("2️⃣");
await pollMessage.react("3️⃣");

你可以直接在Discord客户端输入:one:,把发送出去的表情复制下来,粘贴到代码里就搞定了。

方法2:用系统表情的完整格式

如果一定要用ID的方式,必须把ID套进<:表情名:ID>的格式里。比如:one:对应的ID是422515569623957504,那代码要这么写:

await pollMessage.react("<:one:422515569623957504>");

这个格式是API唯一能识别的「ID式表情」写法,单独传ID肯定会报错。

额外提醒

别把Discord客户端的快捷输入和API的要求搞混了——客户端的:one:只是帮你转换成Unicode字符发送,而直接在代码里写:one:,API会把它当成一个不存在的自定义表情名称,自然就抛出Unknown Emoji错误了。

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

火山引擎 最新活动