Jarquafelmu

Untitled

Nov 18th, 2018
255
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.82 KB | None | 0 0
  1. from redbot.core import commands
  2.  
  3. import discord
  4. import contextlib
  5.  
  6.  
  7. class RoleManager(commands.Cog):
  8.     """Manages roles for Server McServerface"""
  9.    
  10.     guild_id = 493875452046475275
  11.    
  12.     msg_rule_agreement_id = 508393348067885066
  13.     msg_author_id = 513857600152928279
  14.    
  15.     log_id = 509041710651670548
  16.    
  17.     def __init__(self, bot):
  18.         self.bot = bot
  19.         self.guild = self.bot.get_guild(self.guild_id)
  20.         self.log = self.bot.get_channel(self.log_id)
  21.        
  22.         self.roles = {
  23.             "reader": {
  24.                 "id": 506657944860098561
  25.             },
  26.             "author": {
  27.                 "id": 506657837498368014
  28.             }
  29.         }
  30.        
  31.         self.roles["reader"]["obj"] = self.guild.get_role(self.roles["reader"]["id"])
  32.         self.roles["author"]["obj"] = self.guild.get_role(self.roles["author"]["id"])
  33. #        
  34. #    async def get_member(self, user_id: int):
  35. #        """Gets a member object from a user id"""
  36. #        
  37. #        return discord.utils.get(self.guild.members, id=user_id)        
  38.    
  39.     async def on_raw_reaction_add(self, payload):        
  40.         """
  41.        Member agrees to the rules
  42.        """        
  43.         await self.process_reaction(payload, True)
  44.                
  45.     async def on_raw_reaction_remove(self, payload):        
  46.         """
  47.        Member no longer agrees to the rules
  48.        """        
  49.         await self.process_reaction(payload, False)
  50.                
  51.     async def process_reaction(self, payload, add: bool):
  52.         """
  53.        Handles the processing of the reaction
  54.        """
  55.         member = self.guild.get_member(payload.user_id)
  56.        
  57.         if member is None:
  58.             return
  59.        
  60.         emoji = str(payload.emoji)
  61.        
  62.         msg_id = payload.message_id
  63.         if msg_id == self.msg_rule_agreement_id:
  64.             await self.process_rule_agreement_reaction(member, emoji, add)
  65.         elif msg_id == self.msg_author_id:
  66.             await self.process_author_reaction(member, emoji, add)          
  67.        
  68.                
  69.     async def process_rule_agreement_reaction(self, member: discord.Member, emoji: str, add: bool):
  70.         """
  71.        Handles the rule agreement reaction
  72.        """
  73.        
  74.         await self.log.send(f"Expected 👍. Received {emoji}. Equal? {'👍' == emoji}")
  75.        
  76.         if emoji == '👍':        
  77.             if add:
  78.                 msg = (
  79.                     f"Thank you for agreeing to the rules for {member.guild.name}.\n"
  80.                     "You have now been granted access to the server."
  81.                 )
  82.                 await member.add_roles(self.roles["reader"]["obj"])
  83.             else:
  84.                 msg = (
  85.                     f"It is unfortunate that you can no longer agree to the rules for {member.guild.name}.\n"
  86.                     "Your access to the server has been restricted.\n"
  87.                     "If you decide to agree to the rules in the future, your access will be restored."
  88.                 )
  89.                 await member.remove_roles(self.roles["reader"]["obj"])
  90.            
  91.             with contextlib.suppress(discord.HTTPException):
  92.                 # we don't want blocked DMs preventing the function working
  93.                 await member.send(msg)
  94.            
  95.        
  96.                
  97.     async def process_author_reaction(self, member: discord.Member, emoji: str, add: bool):
  98.         """
  99.        Handles the rule agreement reaction
  100.        """
  101.        
  102.         await self.log.send(f"Expected 🖊️. Received {emoji}. Equal? {'🖊️' == emoji}")
  103.        
  104.         if emoji == '🖊️':
  105.             # do stuff
  106.             if add:
  107.                 await member.add_roles(self.roles["author"]["obj"])
  108.             else:
  109.                 await member.remove_roles(self.roles["author"]["obj"])
Advertisement
Add Comment
Please, Sign In to add comment