61 lines
2.4 KiB
Python
61 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)
|