62 lines
2.4 KiB
Python
62 lines
2.4 KiB
Python
|
|
"""Менеджер для работы с администраторами admin-bot."""
|
|||
|
|
import json
|
|||
|
|
import logging
|
|||
|
|
from pathlib import Path
|
|||
|
|
from typing import List, Set
|
|||
|
|
|
|||
|
|
logger = logging.getLogger(__name__)
|
|||
|
|
|
|||
|
|
|
|||
|
|
class AdminManager:
|
|||
|
|
"""Управление списком администраторов."""
|
|||
|
|
|
|||
|
|
def __init__(self, admins_file: Path):
|
|||
|
|
"""
|
|||
|
|
Args:
|
|||
|
|
admins_file: Путь к JSON файлу со списком администраторов
|
|||
|
|
"""
|
|||
|
|
self.admins_file = admins_file
|
|||
|
|
self.admins_file.parent.mkdir(parents=True, exist_ok=True)
|
|||
|
|
self._admins: Set[int] = set()
|
|||
|
|
self._load()
|
|||
|
|
|
|||
|
|
def _load(self):
|
|||
|
|
"""Загрузить список администраторов из файла."""
|
|||
|
|
try:
|
|||
|
|
if self.admins_file.exists():
|
|||
|
|
with open(self.admins_file, 'r', encoding='utf-8') as f:
|
|||
|
|
data = json.load(f)
|
|||
|
|
self._admins = set(data.get('admins', []))
|
|||
|
|
logger.info(f"Loaded {len(self._admins)} admins from {self.admins_file}")
|
|||
|
|
else:
|
|||
|
|
logger.info("Admins file not found, starting with empty list")
|
|||
|
|
except Exception as e:
|
|||
|
|
logger.error(f"Error loading admins: {e}", exc_info=True)
|
|||
|
|
self._admins = set()
|
|||
|
|
|
|||
|
|
def _save(self):
|
|||
|
|
"""Сохранить список администраторов в файл."""
|
|||
|
|
try:
|
|||
|
|
with open(self.admins_file, 'w', encoding='utf-8') as f:
|
|||
|
|
json.dump({'admins': list(self._admins)}, f, indent=2)
|
|||
|
|
logger.debug(f"Saved {len(self._admins)} admins to {self.admins_file}")
|
|||
|
|
except Exception as e:
|
|||
|
|
logger.error(f"Error saving admins: {e}", exc_info=True)
|
|||
|
|
|
|||
|
|
def add_admin(self, user_id: int):
|
|||
|
|
"""Добавить администратора."""
|
|||
|
|
if user_id not in self._admins:
|
|||
|
|
self._admins.add(user_id)
|
|||
|
|
self._save()
|
|||
|
|
logger.info(f"Added admin: {user_id}")
|
|||
|
|
else:
|
|||
|
|
logger.debug(f"Admin {user_id} already exists")
|
|||
|
|
|
|||
|
|
def is_admin(self, user_id: int) -> bool:
|
|||
|
|
"""Проверить, является ли пользователь администратором."""
|
|||
|
|
return user_id in self._admins
|
|||
|
|
|
|||
|
|
def get_all_admins(self) -> List[int]:
|
|||
|
|
"""Получить список всех администраторов."""
|
|||
|
|
return list(self._admins)
|