Add a reaction to a message in an interaction
I have a poll command in my nextcord bot. I want to add reactions, but when I try the command, It give me this: https://imgur.com/a/p6s3yy5
. How can i fix it?
btw, this is my command:
@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>")
Solution 1:
Please refrain from posting your errors as images. Please paste them directly into the post.
Explanation
As for the code at hand, InteractionResponse.send_message()
always returns None
, unlike abc.Messageable.send()
, which returns a nextcord.Message
.
This of course raises an Exception when you try to call add_reaction
on a NoneType
.
To get around this, you can search the Interaction.channel
for a message containing the same Embed as the one you just sent, then add the reaction to that.
Code
@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>")