"""Permissions and whitelist handling for Superviseur bot.""" import json import logging from typing import Dict, Optional logger = logging.getLogger('Superviseur') class WhitelistManager: """Manages user whitelist and permissions.""" def __init__(self, whitelist_file: str = 'whitelist.json'): self.whitelist_file = whitelist_file self.whitelist = None self.load_whitelist() def load_whitelist(self) -> None: """Load whitelist from JSON file.""" try: with open(self.whitelist_file, 'r', encoding='utf-8') as f: self.whitelist = json.load(f) logger.info("Whitelist loaded successfully") except FileNotFoundError: # Supprimer le message de warning pour whitelist.json self.whitelist = None except json.JSONDecodeError as e: logger.error(f"Error parsing whitelist.json: {e}") self.whitelist = None def get_user_level(self, user_id: int, user_name: Optional[str] = None) -> Optional[str]: """Get user's whitelist level by ID or name.""" if not self.whitelist: return None user_levels = self.whitelist.get('user_levels', {}) # Try by ID first level = user_levels.get(str(user_id)) if level: return level # Try by name if provided if user_name: level = user_levels.get(user_name) if level: return level return None def has_permission(self, user_id: int, required_level: str, user_name: Optional[str] = None) -> bool: """Check if user has required whitelist level.""" level = self.get_user_level(user_id, user_name) if not level: return False levels = ['wl', 'wl+'] try: user_index = levels.index(level) req_index = levels.index(required_level) return user_index >= req_index except ValueError: return False def get_required_level(self, action: str) -> Optional[str]: """Get required whitelist level for an action.""" if not self.whitelist: return None return self.whitelist.get('commands_permissions', {}).get(action) def check_is_admin(permissions) -> bool: """Check if user has admin permissions.""" if not permissions: return False return ( permissions.administrator or permissions.manage_guild or permissions.manage_roles or permissions.manage_channels or permissions.kick_members or permissions.ban_members or permissions.moderate_members ) def get_permissions_info(permissions, user_level: str = 'none', role_name: str = 'Sujet') -> str: """Get formatted permissions info string including role awareness.""" if not permissions: return f"RÔLE: {role_name}, Permissions (DM): non, Niveau whitelist: {user_level}" has_permissions = ( permissions.administrator or permissions.manage_guild or permissions.manage_roles or permissions.manage_channels or permissions.kick_members or permissions.ban_members or permissions.moderate_members or permissions.manage_messages ) return f"RÔLE: {role_name}, Permissions: {'oui' if has_permissions else 'non'}, Niveau whitelist: {user_level}"