I’m working on setting up reaction roles with my bot, here’s my code:
@client.event
async def on_raw_reaction_add(payload):
message_id = payload.message_id
if message_id == 789543211429265418:
guild_id = payload.guild_id
guild = discord.utils.find(lambda g : g.id == guild_id, client.guilds)
if payload.emoji.name == 'red_circle':
role = discord.utils.get(guild_roles, name='Red')
elif payload.emoji.name == 'orange_circle':
role = discord.utils.get(guild_roles, name='Orange')
elif payload.emoji.name == 'yellow_circle':
role = discord.utils.get(guild_roles, name='Yellow')
if role is not None:
member = discord.utils.find(lambda m : m.id == payload.user_id, guild.members)
if member is not None:
await member.add_roles(role)
print("done")
else:
print("Member not found")
else:
print("Role not found")
Whenever a certain reaction is added, instead of giving a role it gives me an error:
File "main.py", line 203, in on_raw_reaction_add
if role is not None:
UnboundLocalError: local variable 'role' referenced before assignment
Not sure how to fix this, any tips?
Advertisement
Answer
if payload.emoji.name == 'red_circle':
role = discord.utils.get(guild_roles, name='Red')
elif payload.emoji.name == 'orange_circle':
role = discord.utils.get(guild_roles, name='Orange')
elif payload.emoji.name == 'yellow_circle':
role = discord.utils.get(guild_roles, name='Yellow')
this will only define role when these conditions are met. You should probably define it before doing this comparison, or have an else: to catch and define it.
role = None
or
else: role = None