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

如何用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表情,但你误用了自定义表情的格式和获取方式:

  1. client.get_emoji()仅适用于服务器自定义表情,内置unicode表情无法通过ID获取,所以返回None。
  2. 自定义表情的格式<: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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 02:17:26