diff --git a/bot.py b/bot.py index eb88dde..8b6bae8 100755 --- a/bot.py +++ b/bot.py @@ -166,6 +166,16 @@ class MyBot(commands.Bot): kuby_logger.info(f"👋 {member} joined {member.guild.name}") if hasattr(self, 'advanced_logger'): self.advanced_logger.log_member_join(member) + + # Vérifier si la restauration des rôles est activée pour ce serveur + from commandes.security import load_settings + settings = load_settings(member.guild.id) + role_restore_enabled = settings.get("role_restore_enabled", True) + + if not role_restore_enabled: + kuby_logger.debug(f"Restauration des rôles désactivée pour {member.guild.name}, saut...") + return + previous_roles = self.advanced_logger.check_previous_roles(member.id) if previous_roles: guild = member.guild diff --git a/commandes/security.py b/commandes/security.py index 3a2416a..44fddcf 100755 --- a/commandes/security.py +++ b/commandes/security.py @@ -249,6 +249,8 @@ class SecurityView(disnake.ui.View): self.build_whitelist_view() elif self.category == "rules": self.build_rules_view() + elif self.category == "membres": + self.build_members_view() def build_spam_view(self): """Construit la vue Anti-Spam""" @@ -674,6 +676,27 @@ class SecurityView(disnake.ui.View): ephemeral=True ) + def build_members_view(self): + """Construit la vue Paramètres Membres""" + # Toggle Restauration des rôles + role_restore = self.settings.get("role_restore_enabled", True) + btn_restore = ToggleButton( + label="Restauration des rôles", + emoji="🔄", + is_enabled=role_restore, + custom_id="role_restore_enabled" + ) + self.add_item(btn_restore) + + # Bouton retour + btn_back = disnake.ui.Button( + label="Retour", + style=disnake.ButtonStyle.gray, + emoji="⬅️" + ) + btn_back.callback = self.back_to_main + self.add_item(btn_back) + async def back_to_main(self, interaction: disnake.Interaction): """Retour au menu principal""" self.category = None @@ -815,6 +838,12 @@ class MainCategorySelect(disnake.ui.Select): emoji="👥", value="whitelist", description="Gérer les utilisateurs immunisés" + ), + disnake.SelectOption( + label="Membres", + emoji="👤", + value="membres", + description="Paramètres liés aux membres" ) ] super().__init__( @@ -868,6 +897,11 @@ class MainCategorySelect(disnake.ui.Select): "Gestion Whitelist", "Gérez les utilisateurs immunisés aux protections.\n\n" "Ces utilisateurs ne seront jamais sanctionnés." + ), + "membres": view.create_category_embed( + "Paramètres Membres", + "Paramètres liés à la gestion des membres.\n\n" + "• **Restauration des rôles** : Restaurer automatiquement les rôles des membres de retour" ) } diff --git a/data/security_settings.json b/data/security_settings.json index 7801857..5d48cb8 100644 --- a/data/security_settings.json +++ b/data/security_settings.json @@ -7,6 +7,7 @@ "rules_content": "vfkj,oejfrsknezfrijugn,krvjgfinkrze,fgjin,", "rules_channel_id": 1369669999677145101, "rules_accept_role_id": 1369769836028231730, - "rules_message_type": "embed" + "rules_message_type": "embed", + "role_restore_enabled": true } } \ No newline at end of file diff --git a/serveur_flask.py b/serveur_flask.py index e2f92ca..b927fcb 100644 --- a/serveur_flask.py +++ b/serveur_flask.py @@ -82,7 +82,7 @@ def run_mep_logic(author, commit_msg, branch="main"): send_discord_log("VALIDÉ", msg, 3066993, author, commit_msg) # 3. PM2 (Appelé après le message pour éviter que le kill du serv ne bloque l'envoi) - subprocess.run(f"pm2 restart {PROCESS_NAME}", shell=True, check=True, capture_output=True) + subprocess.run(f"/home/discord/.nvm/versions/node/v24.15.0/bin/pm2 {PROCESS_NAME}", shell=True, check=True, capture_output=True) except Exception as e: error_msg = f"❌ **ERREUR de déploiement**\n```python\n{str(e)}\n```"