audio_from_youtube/app/admin_manager.py

62 lines
2.4 KiB
Python
Raw Permalink Normal View History

"""Менеджер для работы с администраторами 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)