I have made my discord bot give and remove roles on reacting and unreacting. How do I make it so that when the user reacts to a emoji while already having reacted to a different one before, the previous one gets removed? So that the roles won't stack up...?
Here is my code for adding a role:
@commands.Cog.listener()
async def on_raw_reaction_add(self, payload):
message_id = payload.message_id
if message_id == 810784018953666580:
guild_id = payload.guild_id
guild = discord.utils.find(lambda g: g.id == guild_id, self.client.guilds)
if payload.emoji.name == 'grey_B19FF9':
role = guild.get_role(810471074500182036)
elif payload.emoji.name == 'skyblue_11A7BB':
role = guild.get_role(810471062449291296)
else:
role = discord.utils.get(guild.roles, name=payload.emoji.name)
if role is not None:
member = payload.member
if member is not None:
await member.add_roles(role)
print("Done.")
else:
print("Member not found.")
else:
print("Role not found")
and this is for removing the role:
@commands.Cog.listener()
async def on_raw_reaction_remove(self, payload):
message_id = payload.message_id
if message_id == 810784018953666580:
guild_id = payload.guild_id
guild = discord.utils.find(lambda g: g.id == guild_id, self.client.guilds)
if payload.emoji.name == 'grey_B19FF9':
role = guild.get_role(810471074500182036)
elif payload.emoji.name == 'skyblue_11A7BB':
role = guild.get_role(810471062449291296)
else:
role = discord.utils.get(guild.roles, name=payload.emoji.name)
if role is not None:
guild = await self.client.fetch_guild(payload.guild_id)
member = await guild.fetch_member(payload.user_id)
if member is not None:
await member.remove_roles(role)
print("Done.")
else:
print("Member not found.")
else:
print("Role not found")
any help would be much appreciated!