Selaa lähdekoodia

added feature to remove roles on raw_reaction_remove

tenessy0570 3 vuotta sitten
vanhempi
commit
ed9aa210ed
2 muutettua tiedostoa jossa 25 lisäystä ja 8 poistoa
  1. 13 5
      __init__.py
  2. 12 3
      utils.py

+ 13 - 5
__init__.py

@@ -20,7 +20,7 @@ from utils import (
     get_roles_for_send,
     get_role_from_payload,
     reacted_user_is_bot,
-    get_on_delete_content
+    get_on_delete_content, get_reacted_user
 )
 
 
@@ -106,17 +106,25 @@ class MyClient(discord.Client):
         )
 
     async def on_raw_reaction_add(self, payload):
-        if await reacted_user_is_bot(self, payload):
+        channel = self.get_channel(payload.channel_id)
+        if await reacted_user_is_bot(self, payload) or await in_bot_channel(channel=channel):
             return
 
+        role = await get_role_from_payload(self, payload, channel)
+        await payload.member.add_roles(role)
+
+    async def on_raw_reaction_remove(self, payload):
         channel = self.get_channel(payload.channel_id)
-        if await in_bot_channel(channel=channel):
+        if await reacted_user_is_bot(self, payload) or await in_bot_channel(channel=channel):
             return
 
         role = await get_role_from_payload(self, payload, channel)
-        await payload.member.add_roles(role)
+        reacted_user = await get_reacted_user(self, payload)
+
+        await reacted_user.remove_roles(role)
 
 
+intents = discord.Intents().all()
+client = MyClient(intents=intents)
 bot_token = environ.get('bot_token')
-client = MyClient()
 client.run(bot_token)

+ 12 - 3
utils.py

@@ -79,8 +79,11 @@ async def get_message_by_id(channel, message_id):
     return await discord.GroupChannel.fetch_message(self=channel, id=message_id)
 
 
-async def get_reaction_info(payload):
-    return payload.emoji, payload.member, payload.message_id
+async def _get_reaction_info(self, payload):
+    guild = self.get_guild(payload.guild_id)
+    member = guild.get_member(payload.user_id)
+    print(member.name)
+    return payload.emoji, member, payload.message_id
 
 
 async def create_message_and_add_reactions(self, _channel, _roles_for_send):
@@ -112,7 +115,7 @@ async def _get_role_by_name(self, name):
 
 
 async def get_role_from_payload(self, payload, channel):
-    emoji, reacted_user, message_id = await get_reaction_info(payload)
+    emoji, reacted_user, message_id = await _get_reaction_info(self, payload)
     guild = channel.guild
     emoji = emoji.name.lower()
     role = discord.utils.get(guild.roles, name=self._roles[emoji])
@@ -127,3 +130,9 @@ async def get_on_delete_content(message):
     return f'"{message.content}"' \
             if not await is_embed(message) \
             else 'just an embed or an image.'
+
+
+async def get_reacted_user(self, payload):
+    guild = self.get_guild(payload.guild_id)
+    user = guild.get_member(payload.user_id)
+    return user