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

Discord.py 2.0交互命令添加表情反应失败问题求助

解决Discord.py 2.0 Slash命令添加表情反应失败的问题

问题根源

你遇到的问题核心在于对Discord.py 2.0交互响应对象的理解偏差:

  • interaction.response.send_message() 不会返回发送出去的Message实例,它返回的是InteractionResponse对象,因此你用message.add_reaction()本质是在错误的对象上操作。
  • interaction.message仅在交互针对已有消息触发时才存在(比如消息上下文菜单命令),而Slash命令是全新发起的,此时interaction.message为None,调用它的add_reaction()会报错。
  • interaction.add_reaction()并非合法方法,自然无法生效。

正确实现方式

要给Slash命令发送的消息添加反应,需先通过interaction.original_response()获取发送出去的Message实例,再执行添加反应的操作:

@bot.tree.command()
@app_commands.describe(question="Give a title")
async def poll(interaction: discord.Interaction, question: str, choice_a: str = None, choice_b: str = None, choice_c: str = None):
    # 过滤空选项,避免Embed标题出现多余换行
    embed_options = [opt for opt in [choice_a, choice_b, choice_c] if opt]
    emb = discord.Embed(title="\n".join(embed_options), type="rich")

    # 发送交互响应
    await interaction.response.send_message(f"**{question}**", embed=emb)
    # 获取已发送的消息对象
    sent_message = await interaction.original_response()
    # 添加表情反应
    await sent_message.add_reaction('👍')

额外注意事项

  • 确保机器人在目标频道拥有添加反应和发送消息的权限,否则会因权限不足失败。
  • 如果需要添加多个反应,可以连续调用add_reaction(),或者用asyncio.gather()批量执行以提升效率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 22:25:21