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)