audio_from_youtube/app/admin_manager.py

61 lines
2.4 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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