如何用Discord.py为消息添加反应?遇无效参数/未知表情错误
Discord机器人添加表情反应失败问题
我尝试给机器人发送的消息添加反应,先后两次尝试都失败了:
第一次尝试代码:
@client.command() @commands.is_owner() async def reactionmessage(ctx): msg = await ctx.send("test") emoji = client.get_emoji(1078793534909452389) # <-- 该代码返回emoji变量为None,尽管这是表情的ID await msg.add_reaction(emoji)
运行报错:
discord.ext.commands.errors.CommandInvokeError: Command raised an exception: InvalidArgument: emoji argument must be str, Emoji, or Reaction not NoneType.
第二次尝试代码:
@client.command() @commands.is_owner() async def reactionmessage(ctx): msg = await ctx.send("test") await msg.add_reaction('<:regional_indicator_x:1078793534909452389>')
运行报错:
discord.ext.commands.errors.CommandInvokeError: Command raised an exception: HTTPException: 400 Bad Request (error code: 10014): Unknown Emoji
我确定这不是自定义表情,但仍然无法实现功能。
解决方案
问题原因
你提到的regional_indicator_x是Discord的内置unicode表情,但你误用了自定义表情的格式和获取方式:
client.get_emoji()仅适用于服务器自定义表情,内置unicode表情无法通过ID获取,所以返回None。- 自定义表情的格式
<:name:id>不能用于内置表情,Discord无法识别这种格式的内置表情,因此报Unknown Emoji。
正确实现方式
直接使用内置表情的unicode字符或者表情名称对应的字符串即可:
方法1:使用unicode字符
@client.command() @commands.is_owner() async def reactionmessage(ctx): msg = await ctx.send("test") # 直接使用regional_indicator_x对应的unicode字符 "🇽" await msg.add_reaction("🇽")
方法2:使用Discord内置表情的名称字符串(仅部分支持)
部分内置表情可以通过名称字符串调用,比如:
@client.command() @commands.is_owner() async def reactionmessage(ctx): msg = await ctx.send("test") await msg.add_reaction("regional_indicator_x")
补充说明
- 如果你不确定内置表情的unicode字符,可以在Discord聊天框输入
:regional_indicator_x:,发送后复制生成的表情字符即可。 - 仅服务器自定义表情需要使用
client.get_emoji(id)或<:name:id>格式,且机器人必须在该表情所在的服务器中才能调用。
内容的提问来源于stack exchange,提问作者Zgn
相关产品推荐
相关产品推荐

