Fix bot polling, downloads, and file delivery
This commit is contained in:
commit
8a21cbe18a
16 changed files with 1712 additions and 0 deletions
61
app/admin_manager.py
Normal file
61
app/admin_manager.py
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
"""Менеджер для работы с администраторами 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)
|
||||
Loading…
Add table
Add a link
Reference in a new issue