From d533104f5f2269ead1d3c319f9d7807418a57f04 Mon Sep 17 00:00:00 2001 From: Gian Pena Date: Mon, 23 Jun 2025 02:18:52 -0500 Subject: [PATCH 1/6] Add boostrolemanager cog to bot --- src/cogs/boostrolemanager.py | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 src/cogs/boostrolemanager.py diff --git a/src/cogs/boostrolemanager.py b/src/cogs/boostrolemanager.py new file mode 100644 index 0000000..dcf0810 --- /dev/null +++ b/src/cogs/boostrolemanager.py @@ -0,0 +1,25 @@ +import discord +from discord.ext import commands + +class BoostTracker(commands.Cog): + def __init__(self, bot): + self.bot = bot + + @commands.Cog.listener() + async def on_member_update(self, before, after): + if before.premium_since == after.premium_since or after.premium_since: + return + + roles_to_remove = [ + "nitro-a", + "nitro-b", + "nitro-c", + "nitro-d", + "nitro-e", + "nitro-f" + ] + + for role_name in roles_to_remove: + role = discord.utils.get(after.guild.roles, name=role_name) + if role not in after.roles: continue + await after.remove_roles(role) \ No newline at end of file From 00c31194ef3a1412ad97c622c247f8a160b473ab Mon Sep 17 00:00:00 2001 From: Gian Pena Date: Mon, 23 Jun 2025 22:06:09 -0500 Subject: [PATCH 2/6] Fix comparison logic --- src/cogs/boostrolemanager.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cogs/boostrolemanager.py b/src/cogs/boostrolemanager.py index dcf0810..bacd061 100644 --- a/src/cogs/boostrolemanager.py +++ b/src/cogs/boostrolemanager.py @@ -7,7 +7,7 @@ def __init__(self, bot): @commands.Cog.listener() async def on_member_update(self, before, after): - if before.premium_since == after.premium_since or after.premium_since: + if (before.premium_since is None) == (after.premium_since is None) or after.premium_since: return roles_to_remove = [ From 9baae250726dbeaa8cb8321420916e0b1862c9a9 Mon Sep 17 00:00:00 2001 From: Gian Pena Date: Tue, 24 Jun 2025 01:22:34 -0500 Subject: [PATCH 3/6] add setup function to boostrolemanager.py --- src/cogs/boostrolemanager.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/cogs/boostrolemanager.py b/src/cogs/boostrolemanager.py index bacd061..8f336c6 100644 --- a/src/cogs/boostrolemanager.py +++ b/src/cogs/boostrolemanager.py @@ -22,4 +22,7 @@ async def on_member_update(self, before, after): for role_name in roles_to_remove: role = discord.utils.get(after.guild.roles, name=role_name) if role not in after.roles: continue - await after.remove_roles(role) \ No newline at end of file + await after.remove_roles(role) + +async def setup(bot): + await bot.add_cog(BoostTracker(bot), guilds=[discord.Object(id=bot.guild_id)]) \ No newline at end of file From 85f3d4b193f97d2a47ea2c445086e18dd57a1b40 Mon Sep 17 00:00:00 2001 From: Gian Pena Date: Thu, 3 Jul 2025 22:50:59 -0500 Subject: [PATCH 4/6] update .gitignore --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index 32924ea..00e8df7 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,6 @@ config.json +# IDEs +.idea/ # Byte-compiled / optimized / DLL files __pycache__/ From 07a2c54d95cfd0a8608decd0972dd10629d5cbf1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gian=20Pe=C3=B1a?= Date: Sun, 20 Jul 2025 22:02:39 +0000 Subject: [PATCH 5/6] Add boostrolemanager cog to list of cogs --- src/main.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main.py b/src/main.py index ba1b659..b22efd9 100644 --- a/src/main.py +++ b/src/main.py @@ -46,6 +46,7 @@ # "cogs.threads", "cogs.rolereact", "cogs.logs", + "cogs.boostrolemanager", ] From 819635e05c731628ceff2cc274962cd780d02c06 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gian=20Pe=C3=B1a?= Date: Fri, 25 Jul 2025 04:52:47 +0000 Subject: [PATCH 6/6] Fix some things - Should actually be using nextcord (my bad lol) - Make setup command more consistent with definitions in other cogs - Catch exceptions in case role removal does not work correctly --- src/cogs/boostrolemanager.py | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/src/cogs/boostrolemanager.py b/src/cogs/boostrolemanager.py index 8f336c6..852f718 100644 --- a/src/cogs/boostrolemanager.py +++ b/src/cogs/boostrolemanager.py @@ -1,5 +1,6 @@ -import discord -from discord.ext import commands +import nextcord +from nextcord.ext import commands +from nextcord import Forbidden, HTTPException class BoostTracker(commands.Cog): def __init__(self, bot): @@ -19,10 +20,15 @@ async def on_member_update(self, before, after): "nitro-f" ] - for role_name in roles_to_remove: - role = discord.utils.get(after.guild.roles, name=role_name) - if role not in after.roles: continue - await after.remove_roles(role) + try: + for role_name in roles_to_remove: + role = nextcord.utils.get(after.guild.roles, name=role_name) + if role not in after.roles: continue + await after.remove_roles(role) + except Forbidden as e: + print(f'Insufficient permissions: {e}') + except HTTPException as e: + print(f'HTTP request failed: {e}') -async def setup(bot): - await bot.add_cog(BoostTracker(bot), guilds=[discord.Object(id=bot.guild_id)]) \ No newline at end of file +def setup(bot): + bot.add_cog(BoostTracker(bot)) \ No newline at end of file