在交互中添加对消息的反应

Add a reaction to a message in an interaction

我的 nextcord 机器人中有一个轮询命令。我想添加反应,但是当我尝试命令时,它给了我这个: https://imgur.com/a/p6s3yy5 。我该如何解决?

顺便说一句,这是我的命令:

@nextcord.slash_command(name="yes-no-poll", description="Crée un sondage à deux options", guild_ids=[server])
async def yesno(self, ctx: nextcord.Interaction, poll):
    embed = nextcord.Embed(title=poll, color=nextcord.Color.blue())
    vote = await ctx.response.send_message(embed=embed)
    await vote.add_reaction("<:yes:914969003645091900>")
    await vote.add_reaction("<:no:914969105482809355>")

请避免post将您的错误作为图片处理。请将它们直接粘贴到 post.

说明

至于手头的代码,InteractionResponse.send_message()总是returnsNone,不像abc.Messageable.send(),returns一个nextcord.Message

当您尝试在 NoneType 上调用 add_reaction 时,这当然会引发异常。

要解决此问题,您可以在 Interaction.channel 中搜索包含与您刚刚发送的相同嵌入内容的消息,然后添加回应。

代码

@nextcord.slash_command(name="yes-no-poll", description="Crée un sondage à deux options", guild_ids=[703732969160048731])
async def yesno(self, ctx: nextcord.Interaction, poll):
    embed = nextcord.Embed(title=poll, colour=nextcord.Colour.blue())
    await ctx.response.send_message(embed=embed)

    # Loop through channel history and pull the message that matches (should be first)
    message: nextcord.Message
    async for message in ctx.channel.history():
        if not message.embeds:
            continue
        if message.embeds[0].title == embed.title and message.embeds[0].colour == embed.colour:
            vote = message
            break
    else:
        # something broke
        return

    await vote.add_reaction("<:yes:914969003645091900>")
    await vote.add_reaction("<:no:914969105482809355>")