Skip to content
Advertisement

Python Discord Bot – python clear_reaction() clears all reactions instead of a specific one

I am making a Discord Bot using python and I want a message to have only certain reactions and on adding a reaction I want the code to delete every unwanted one. I really want it to verify if there is no other reactions to remove, not only the one that has just been added.

My problem, as said in the title, is that I don’t know why but clear_reaction() clears all reactions.

So here is my code :

inter_totale = ["✅", "❌"]


@bot.event
async def on_raw_reaction_add(payload):
    emoji, user, member, channel = payload.emoji, await bot.fetch_user(user_id=payload.user_id), payload.member, bot.get_channel(payload.channel_id)
    msg = await channel.fetch_message(payload.message_id)

    if payload.message_id == specific_message:
        if inter_totale.count(emoji.name):
            pass #  NOT DONE YET

        else:  #  deletes unwanted reactions
            for r in msg.reactions:
                if not inter_totale.count(r.emoji):
                    await msg.clear_reaction(r)

Thanks.

Advertisement

Answer

This is going to remove all reactions instead of the bot it.

You can do something like this. The if statement is just to check if it is not the bot itself, it will remove all reactions not made by the bot.

@bot.event
async def on_raw_reaction_add(payload):
    channel = await bot.fetch_channel(payload.channel_id)
    message = await channel.fetch_message(payload.message_id)
    reaction = discord.utils.get(message.reactions, emoji=payload.emoji.name)
    inter_totale = ["✅", "❌"]

    if user.id != bot.user.id and payload.emoji.name not in inter_total:
        await reaction.remove(payload.member)

User contributions licensed under: CC BY-SA
5 People found this is helpful
Advertisement