aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--bot/constants.py4
-rw-r--r--bot/exts/info/patreon.py75
-rw-r--r--config-default.yml5
3 files changed, 84 insertions, 0 deletions
diff --git a/bot/constants.py b/bot/constants.py
index f99913b17..b84a3747a 100644
--- a/bot/constants.py
+++ b/bot/constants.py
@@ -512,6 +512,10 @@ class Roles(metaclass=YAMLGetter):
jammers: int
+ patreon_tier_1: int
+ patreon_tier_2: int
+ patreon_tier_3: int
+
class Guild(metaclass=YAMLGetter):
section = "guild"
diff --git a/bot/exts/info/patreon.py b/bot/exts/info/patreon.py
new file mode 100644
index 000000000..62574f58f
--- /dev/null
+++ b/bot/exts/info/patreon.py
@@ -0,0 +1,75 @@
+import logging
+
+import discord
+from discord.ext import commands
+
+from bot import constants
+from bot.bot import Bot
+
+log = logging.getLogger(__name__)
+
+
+class Patreon(commands.Cog):
+ """Cog that shows patreon supporters."""
+
+ def __init__(self, bot: Bot):
+ self.bot: Bot = bot
+
+ @commands.Cog.listener()
+ async def on_member_update(self, before: discord.Member, after: discord.Member) -> None:
+ """Send a message when someone receives a patreon role."""
+ # Ensure the caches are up to date
+ await self.bot.wait_until_guild_available()
+
+ guild: discord.Guild = await self.bot.fetch_guild(constants.Guild.id)
+
+ await guild.fetch_channels()
+ await guild.fetch_roles()
+
+ patreon_tier_1_role: discord.Role = guild.get_role(constants.Roles.patreon_tier_1)
+ patreon_tier_2_role: discord.Role = guild.get_role(constants.Roles.patreon_tier_2)
+ patreon_tier_3_role: discord.Role = guild.get_role(constants.Roles.patreon_tier_3)
+
+ sending_channel = discord.utils.get(self.bot.get_all_channels(), id=constants.Channels.meta)
+
+ current_patreon_tier: int = 0
+ new_patreon_tier: int = 0
+
+ # Both of these go from top to bottom to give the user their highest patreon role if they have multiple
+
+ if patreon_tier_3_role in before.roles:
+ current_patreon_tier = 3
+ elif patreon_tier_2_role in before.roles:
+ current_patreon_tier = 2
+ elif patreon_tier_1_role in before.roles:
+ current_patreon_tier = 1
+
+ if patreon_tier_3_role in after.roles:
+ new_patreon_tier = 3
+ colour = patreon_tier_3_role.colour
+ elif patreon_tier_2_role in after.roles:
+ new_patreon_tier = 2
+ colour = patreon_tier_2_role.colour
+ elif patreon_tier_1_role in after.roles:
+ new_patreon_tier = 1
+ colour = patreon_tier_1_role.colour
+
+ if not new_patreon_tier > current_patreon_tier:
+ return
+
+ message = (
+ f":tada: {after.mention} just became a **tier {new_patreon_tier}** patron!\n"
+ f"[Support us on Patreon](https://pydis.com/patreon)"
+ )
+
+ await sending_channel.send(
+ embed=discord.Embed(
+ description=message,
+ colour=colour
+ )
+ )
+
+
+def setup(bot: Bot) -> None:
+ """Load the patreon cog."""
+ bot.add_cog(Patreon(bot))
diff --git a/config-default.yml b/config-default.yml
index 3405934e0..ac4cb887f 100644
--- a/config-default.yml
+++ b/config-default.yml
@@ -288,6 +288,11 @@ guild:
# Streaming
video: 764245844798079016
+ # Patreon
+ patreon_tier_1: 505040943800516611
+ patreon_tier_2: 743399725914390631
+ patreon_tier_3: 743400204367036520
+
moderation_roles:
- *ADMINS_ROLE
- *MOD_TEAM_ROLE