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
相关产品推荐
相关产品推荐

