aboutsummaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
Diffstat (limited to 'examples')
-rw-r--r--examples/reaction_roles.py52
1 files changed, 27 insertions, 25 deletions
diff --git a/examples/reaction_roles.py b/examples/reaction_roles.py
index b462ed77..b58e7f74 100644
--- a/examples/reaction_roles.py
+++ b/examples/reaction_roles.py
@@ -1,83 +1,85 @@
-"""Uses a messages to add and remove roles through reactions."""
+# This example requires the 'members' privileged intents
import discord
-class RoleReactClient(discord.Client):
+class MyClient(discord.Client):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
- self.role_message_id = 0 # ID of message that can be reacted to to add role
+ self.role_message_id = 0 # ID of the message that can be reacted to to add/remove a role.
self.emoji_to_role = {
- partial_emoji_1: 0, # ID of role associated with partial emoji object 'partial_emoji_1'
- partial_emoji_2: 0 # ID of role associated with partial emoji object 'partial_emoji_2'
+ discord.PartialEmoji(name='🔴'): 0, # ID of the role associated with unicode emoji '🔴'.
+ discord.PartialEmoji(name='🟡'): 0, # ID of the role associated with unicode emoji '🟡'.
+ discord.PartialEmoji(name='green', id=0): 0, # ID of the role associated with a partial emoji's ID.
}
- async def on_raw_reaction_add(self, payload):
+ async def on_raw_reaction_add(self, payload: discord.RawReactionActionEvent):
"""Gives a role based on a reaction emoji."""
- # Make sure that the message the user is reacting to is the one we care about
+ # Make sure that the message the user is reacting to is the one we care about.
if payload.message_id != self.role_message_id:
return
+ guild = self.get_guild(payload.guild_id)
+ if guild is None:
+ # Check if we're still in the guild and it's cached.
+ return
+
try:
role_id = self.emoji_to_role[payload.emoji]
except KeyError:
# If the emoji isn't the one we care about then exit as well.
return
- guild = self.get_guild(payload.guild_id)
- if guild is None:
- # Check if we're still in the guild and it's cached.
- return
-
role = guild.get_role(role_id)
if role is None:
# Make sure the role still exists and is valid.
return
try:
- # Finally add the role
+ # Finally, add the role.
await payload.member.add_roles(role)
except discord.HTTPException:
# If we want to do something in case of errors we'd do it here.
pass
- async def on_raw_reaction_remove(self, payload):
+ async def on_raw_reaction_remove(self, payload: discord.RawReactionActionEvent):
"""Removes a role based on a reaction emoji."""
- # Make sure that the message the user is reacting to is the one we care about
+ # Make sure that the message the user is reacting to is the one we care about.
if payload.message_id != self.role_message_id:
return
+ guild = self.get_guild(payload.guild_id)
+ if guild is None:
+ # Check if we're still in the guild and it's cached.
+ return
+
try:
role_id = self.emoji_to_role[payload.emoji]
except KeyError:
# If the emoji isn't the one we care about then exit as well.
return
- guild = self.get_guild(payload.guild_id)
- if guild is None:
- # Check if we're still in the guild and it's cached.
- return
-
role = guild.get_role(role_id)
if role is None:
# Make sure the role still exists and is valid.
return
+ # The payload for `on_raw_reaction_remove` does not provide `.member`
+ # so we must get the member ourselves from the payload's `.user_id`.
member = guild.get_member(payload.user_id)
if member is None:
- # Makes sure the member still exists and is valid
+ # Make sure the member still exists and is valid.
return
try:
- # Finally, remove the role
+ # Finally, remove the role.
await member.remove_roles(role)
except discord.HTTPException:
# If we want to do something in case of errors we'd do it here.
pass
-# This bot requires the members and reactions intents.
intents = discord.Intents.default()
intents.members = True
-client = RoleReactClient(intents=intents)
-client.run("token")
+client = MyClient(intents=intents)
+client.run('token')