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




