如何解决Discord机器人添加表情反应时的value "" is not snowflake错误?
解决Discord机器人添加表情反应时的"value "" is not snowflake"错误
问题原因
你代码里用:thumbsup:、:thumbsdown:这种Discord客户端的表情别名调用add_reaction(),但这个方法不识别这种格式,会将其解析为空字符串。而Discord要求表情参数必须是有效的snowflake ID(自定义表情)或Unicode字符,因此触发该错误。
修复方案
有两种可行的修复方式:
方式1:使用Unicode表情字符
直接传入表情对应的Unicode字符,适用于系统默认表情,操作最简便:
@bot.command() async def todo(ctx, *, todo): channel = bot.get_channel(977358109607608330) message = await channel.send(f"{ctx.author.mention} has suggested: \n{str(todo)}") await message.add_reaction("👍") await message.add_reaction("👎")
方式2:使用自定义表情的正确格式(针对服务器自定义表情)
如果要添加的是你服务器的自定义表情,有两种写法:
# 写法1:直接用<:表情名称:表情ID>格式字符串 await message.add_reaction("<:custom_thumbsup:123456789012345678>") # 写法2:通过ID获取表情对象再传入 thumbsup_emoji = bot.get_emoji(123456789012345678) await message.add_reaction(thumbsup_emoji)
额外说明
- 系统默认表情的Unicode字符,可以在Discord客户端发送表情后直接复制使用。
- 自定义表情的ID需要开启Discord开发者模式,按住
Shift右键表情选择"复制ID"即可获取。
内容的提问来源于stack exchange,提问作者swodaw
相关产品推荐
相关产品推荐

