From e1e75b08abf6a689b82b26bce069c159a98631e9 Mon Sep 17 00:00:00 2001
From: p08dev
Date: Tue, 11 Mar 2025 21:50:12 +0100
Subject: [PATCH] try removing only exclusive roles
---
exclusiveroles/__init__.py | 4 +-
.../{exclusiverole.py => exclusiveroles.py} | 47 +++++++------------
exclusiveroles/info.json | 2 +-
3 files changed, 20 insertions(+), 33 deletions(-)
rename exclusiveroles/{exclusiverole.py => exclusiveroles.py} (66%)
diff --git a/exclusiveroles/__init__.py b/exclusiveroles/__init__.py
index a80fc57..201a7b3 100644
--- a/exclusiveroles/__init__.py
+++ b/exclusiveroles/__init__.py
@@ -1,8 +1,8 @@
-from .exclusiverole import ExclusiveRole
+from .exclusiveroles import ExclusiveRoles
async def setup(bot):
- cog = ExclusiveRole(bot)
+ cog = ExclusiveRoles(bot)
r = bot.add_cog(cog)
if r is not None:
await r
\ No newline at end of file
diff --git a/exclusiveroles/exclusiverole.py b/exclusiveroles/exclusiveroles.py
similarity index 66%
rename from exclusiveroles/exclusiverole.py
rename to exclusiveroles/exclusiveroles.py
index 978b88f..ecf0f29 100644
--- a/exclusiveroles/exclusiverole.py
+++ b/exclusiveroles/exclusiveroles.py
@@ -5,7 +5,7 @@ from redbot.core import Config, checks, commands
from redbot.core.commands import Cog
-class ExclusiveRole(Cog):
+class ExclusiveRoles(Cog):
"""
Create roles that prevent all other exclusive roles from being added
"""
@@ -40,7 +40,7 @@ class ExclusiveRole(Cog):
async with self.config.guild(ctx.guild).role_list() as rl:
rl.append(role.id)
- await self.check_guild(ctx.guild)
+ #await self.check_guild(ctx.guild)
await ctx.send("Exclusive role added")
@@ -85,28 +85,11 @@ class ExclusiveRole(Cog):
role_set = set(await self.config.guild(member.guild).role_list())
member_set = {role.id for role in member.roles}
-
- # Rolle für exklusive Rollen
- exclusive_roles = {role.id for role in role_set if role.is_exclusive} # Beispiel, du kannst dies je nach Implementierung anpassen
-
- # Prüfen, ob bereits eine exklusive Rolle gesetzt ist
- existing_exclusive_roles = member_set & exclusive_roles
-
- if existing_exclusive_roles:
- # Entferne alle exklusiven Rollen, wenn eine andere exklusive Rolle gesetzt wird
- to_remove = [discord.utils.get(member.guild.roles, id=r_id) for r_id in existing_exclusive_roles]
- await member.remove_roles(*to_remove, reason="Exclusive role replaced")
+ to_remove = (member_set - role_set) - {member.guild.default_role.id}
- # Jetzt die neue exklusive Rolle hinzufügen, falls sie gesetzt ist
- new_exclusive_role = next((role for role in role_set if role.id not in member_set), None)
- if new_exclusive_role:
- await member.add_roles(new_exclusive_role, reason="Exclusive role added")
-
- # Entferne alle nicht-exklusiven Rollen, die gesetzt sind
- to_remove_non_exclusive = (member_set - role_set) - {member.guild.default_role.id} - exclusive_roles
- if to_remove_non_exclusive:
- to_remove_non_exclusive = [discord.utils.get(member.guild.roles, id=r_id) for r_id in to_remove_non_exclusive]
- await member.remove_roles(*to_remove_non_exclusive, reason="Non-exclusive roles removed")
+ if to_remove and member_set & role_set:
+ to_remove = [discord.utils.get(member.guild.roles, id=r_id) for r_id in to_remove]
+ await member.remove_roles(*to_remove, reason="Exclusive roles")
@commands.Cog.listener()
@@ -119,11 +102,15 @@ class ExclusiveRole(Cog):
await asyncio.sleep(1)
- role_set = set(await self.config.guild(after.guild).role_list())
- member_set = {role.id for role in after.roles}
+ role_set = set(await self.config.guild(after.guild).role_list())
+ new_exclusive_roles = [role for role in after.roles if role.id in role_set]
- if role_set & member_set:
- try:
- await self.remove_non_exclusive_roles(after, role_set=role_set)
- except discord.Forbidden:
- pass
\ No newline at end of file
+ if len(new_exclusive_roles) > 1:
+ added_roles = [role for role in new_exclusive_roles if role not in before.roles]
+ keep_role = added_roles[-1] if added_roles else new_exclusive_roles[-1]
+ roles_to_remove = [role for role in new_exclusive_roles if role != keep_role]
+
+ try:
+ await after.remove_roles(*roles_to_remove)
+ except discord.Forbidden:
+ pass
\ No newline at end of file
diff --git a/exclusiveroles/info.json b/exclusiveroles/info.json
index 5ffb78e..f1ef0fe 100644
--- a/exclusiveroles/info.json
+++ b/exclusiveroles/info.json
@@ -6,7 +6,7 @@
"min_bot_version": "3.4.0",
"description": "Assign roles to be exclusive, preventing other exclusive roles from being added. Normal roles are unaffected.",
"hidden": false,
- "install_msg": "Thank you for installing ExclusiveRole. Get started with `[p]load exclusiverole` and `[p]help ExclusiveRole`",
+ "install_msg": "Thank you for installing ExclusiveRoles. Get started with `[p]load exclusiverole` and `[p]help ExclusiveRole`",
"short": "Set roles to be exclusive",
"end_user_data_statement": "This cog does not store any End User Data",
"tags": [