diff --git a/cogs/flairroles.py b/cogs/flairroles.py new file mode 100644 index 0000000..a83a212 --- /dev/null +++ b/cogs/flairroles.py @@ -0,0 +1,93 @@ +import discord +from discord.ext import commands +from logging import getLogger +from jeevesbot import env + +# setup logging +log = getLogger(__name__) +e = discord.Embed() + + +class Flair(commands.Cog): + def __init__(self, bot): + self.bot = bot + self.message_id = 1084937456819908679 + self.reactions = { + '1️⃣' : env.FLAIRROLES[0], + '2️⃣' : env.FLAIRROLES[1], + '3️⃣' : env.FLAIRROLES[2], + '4️⃣' : env.FLAIRROLES[3], + '5️⃣' : env.FLAIRROLES[4], + '6️⃣' : env.FLAIRROLES[5], + '👍' : env.FLAIRROLES[6], + '👎' : env.FLAIRROLES[7], + '🔞' : env.FLAIRROLES[8], + } + + @commands.Cog.listener() + async def on_raw_reaction_add(self, payload): + try: + if payload.message_id == self.message_id and str(payload.emoji) in self.reactions: + guild = self.bot.get_guild(payload.guild_id) + member = guild.get_member(payload.user_id) + role_id = self.reactions[str(payload.emoji)] + role = guild.get_role(role_id) + flairrole = guild.get_role(env.FLAIRROLE[0]) + await member.add_roles(flairrole) + await member.add_roles(role) + log.info(f'Added role "{role}" to {member}') + except: + log.debug("Reaction not found.") + + @commands.Cog.listener() + async def on_raw_reaction_remove(self, payload): + try: + if payload.message_id == self.message_id and str(payload.emoji) in self.reactions: + guild = self.bot.get_guild(payload.guild_id) + member = guild.get_member(payload.user_id) + role_id = self.reactions[str(payload.emoji)] + role = guild.get_role(role_id) + await member.remove_roles(role) + log.info(f'Removed role "{role}" from {member}') + except: + log.debug("Could not remove role") + + @commands.command(name='flairsetup', hidden=True) + @commands.is_owner() + async def flairsetup(self, ctx): + """ Setup reaction post as embed. """ + await ctx.message.delete() + embed = discord.Embed(title="Kies je rollen!", + description="Klik op de emoji onder het bericht om de rol te krijgen.") + embed.add_field(name="", value="", inline=False) + embed.add_field(name="Voornaamwoorden:", value="", inline=False) + embed.add_field(name=":one:", value="hij/hem") + embed.add_field(name=":two:", value="zij/haar") + embed.add_field(name=":three:", value="hen/hun") + embed.add_field(name=":four:", value="die/hun") + embed.add_field(name=":five:", value="die/diens") + embed.add_field(name=":six:", value="iedere/all") + embed.add_field(name="Sta je open voor Direct Messages van andere serverleden?", value="", inline=False) + embed.add_field(name=":thumbsup:", value="DM: ja") + embed.add_field(name=":thumbsdown:", value="DM: nee") + embed.add_field(name="Rollen voor toegang tot opt-in kanalen.", value="", inline=False) + embed.add_field(name=":underage:", value="serieuze-onderwerpen") + embed.set_footer(text="Mis je een voornaamwoord of heb je ideeën voor een andere rol? Laat het de mods weten in de #ideeënbus!\nJe kan zelf je rollen verwijderen door opnieuw op de emoji te drukken.") + message = await ctx.send(embed=embed) + await message.add_reaction("1️⃣") + await message.add_reaction("2️⃣") + await message.add_reaction("3️⃣") + await message.add_reaction("4️⃣") + await message.add_reaction("5️⃣") + await message.add_reaction("6️⃣") + await message.add_reaction("👍") + await message.add_reaction("👎") + await message.add_reaction("🔞") + log.warn(f'{ctx.message.author} reset the flair embed, new message_id = {message.id}') + + @commands.Cog.listener() + async def on_ready(self): + log.info(f'module active') + +async def setup(bot): + await bot.add_cog(Flair(bot)) diff --git a/jeevesbot/env.py.dist b/jeevesbot/env.py.dist index fb1ad44..2bff548 100644 --- a/jeevesbot/env.py.dist +++ b/jeevesbot/env.py.dist @@ -2,4 +2,6 @@ TOKEN = 'discord-bot-token-here' ADMIN_ROLE = 'role-to-exclude-from-gifbot' -GIFCHANNELS = 'add-channel-ids-for-bot-to-work-in' \ No newline at end of file +GIFCHANNELS = 'add-channel-ids-for-bot-to-work-in' +FLAIRROLES = ['add list of role ids to correspond to the emoji'] +FLAIRROLE = ['add id of flair separator role'] \ No newline at end of file