Initialisation du repository de Beta
This commit is contained in:
commit
14985f6dbb
9469 changed files with 1903273 additions and 0 deletions
103
superviseur/permissions.py
Normal file
103
superviseur/permissions.py
Normal file
|
|
@ -0,0 +1,103 @@
|
|||
"""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}"
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue