From d24be973b8050ecb32815962e9a40573d05c3e21 Mon Sep 17 00:00:00 2001 From: Mow910 Date: Tue, 17 Feb 2026 17:56:07 +0100 Subject: [PATCH] =?UTF-8?q?Am=C3=A9lioration=20de=20la=20gestion=20des=20p?= =?UTF-8?q?ermissions=20dans=20les=20salons=20vocaux=20automatiques.=20Pr?= =?UTF-8?q?=C3=A9servation=20des=20permissions=20existantes=20pour=20le=20?= =?UTF-8?q?r=C3=B4le=20"everyone"=20lors=20de=20l'application=20des=20mode?= =?UTF-8?q?s=20d'acc=C3=A8s,=20et=20mise=20=C3=A0=20jour=20des=20overwrite?= =?UTF-8?q?s=20pour=20les=20membres=20en=20fonction=20des=20listes=20blanc?= =?UTF-8?q?he=20et=20noire.=20Cela=20permet=20une=20gestion=20plus=20fine?= =?UTF-8?q?=20des=20acc=C3=A8s=20selon=20le=20mode=20s=C3=A9lectionn=C3=A9?= =?UTF-8?q?.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- discordbot/auto_rooms.py | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/discordbot/auto_rooms.py b/discordbot/auto_rooms.py index 82d11da..601a119 100644 --- a/discordbot/auto_rooms.py +++ b/discordbot/auto_rooms.py @@ -160,11 +160,26 @@ def _find_room_by_message(message_id: int) -> Optional[tuple[int, int, dict]]: async def _apply_access_mode(channel: discord.VoiceChannel, mode: str, whitelist: set, blacklist: set): guild = channel.guild everyone = guild.default_role - overwrites = {} + overwrites = dict(channel.overwrites) # Récupérer les overwrites existants + + # Préserver les permissions existantes pour everyone (stream, speak, soundboards, etc.) + existing_everyone_ow = overwrites.get(everyone, discord.PermissionOverwrite()) everyone_ow = discord.PermissionOverwrite() + + # Copier les permissions importantes qui ne doivent pas être écrasées + everyone_ow.stream = existing_everyone_ow.stream + everyone_ow.speak = existing_everyone_ow.speak + everyone_ow.use_soundboard = existing_everyone_ow.use_soundboard + if mode == "open": everyone_ow.connect = True everyone_ow.view_channel = True + # Retirer les overwrites des membres qui ne sont plus dans la blacklist + for target in list(overwrites.keys()): + if target != everyone and isinstance(target, discord.Member): + if target.id not in blacklist: + overwrites.pop(target, None) + # Ajouter les overwrites pour la blacklist for uid in blacklist: m = guild.get_member(uid) if m: @@ -172,6 +187,12 @@ async def _apply_access_mode(channel: discord.VoiceChannel, mode: str, whitelist elif mode == "closed": everyone_ow.connect = False everyone_ow.view_channel = True + # Retirer les overwrites des membres qui ne sont plus dans la whitelist + for target in list(overwrites.keys()): + if target != everyone and isinstance(target, discord.Member): + if target.id not in whitelist: + overwrites.pop(target, None) + # Ajouter les overwrites pour la whitelist for uid in whitelist: m = guild.get_member(uid) if m: @@ -179,10 +200,17 @@ async def _apply_access_mode(channel: discord.VoiceChannel, mode: str, whitelist elif mode == "private": everyone_ow.connect = False everyone_ow.view_channel = False + # Retirer les overwrites des membres qui ne sont plus dans la whitelist + for target in list(overwrites.keys()): + if target != everyone and isinstance(target, discord.Member): + if target.id not in whitelist: + overwrites.pop(target, None) + # Ajouter les overwrites pour la whitelist for uid in whitelist: m = guild.get_member(uid) if m: overwrites[m] = discord.PermissionOverwrite(connect=True, view_channel=True) + overwrites[everyone] = everyone_ow await channel.edit(overwrites=overwrites)