#!/usr/bin/env python3 """ Скрипт для управления администраторами через CLI Используется для быстрого доступа к функциям управления админами """ import asyncio import sys from pathlib import Path # Добавляем путь к проекту sys.path.insert(0, str(Path(__file__).parent.parent)) from src.core.database import async_session_maker from src.core.services import UserService from src.core.config import ADMIN_IDS async def list_admins(): """Показать список всех администраторов""" async with async_session_maker() as session: from sqlalchemy import select from src.core.models import User # Получаем всех администраторов из БД result = await session.execute( select(User).where(User.is_admin == True).order_by(User.created_at.desc()) ) db_admins = result.scalars().all() print("\n" + "="*60) print("👑 СПИСОК АДМИНИСТРАТОРОВ") print("="*60) print("\n🔴 Главные администраторы (.env):") if ADMIN_IDS: for admin_id in ADMIN_IDS: print(f" • ID: {admin_id}") else: print(" Нет главных администраторов") print("\n🟠 Назначенные администраторы:") if db_admins: for admin in db_admins: name = admin.first_name or admin.username or f"@ID_{admin.telegram_id}" print(f" • {name} (Telegram ID: {admin.telegram_id})") else: print(" Нет назначенных администраторов") print("\n" + "="*60 + "\n") async def add_admin(telegram_id: int): print(f"Use /add_admin {telegram_id} in the bot as a system administrator and confirm the change.") async def remove_admin(telegram_id: int): print(f"Use /remove_admin {telegram_id} in the bot as a system administrator and confirm the change.") async def main(): """Главная функция""" if len(sys.argv) < 2: print(""" Использование: python scripts/manage_admins.py <команда> [аргументы] Команды: list - Показать список всех администраторов add - Добавить администратора (по Telegram ID) remove - Удалить администратора (по Telegram ID) Примеры: python scripts/manage_admins.py list python scripts/manage_admins.py add 123456789 python scripts/manage_admins.py remove 123456789 """) return command = sys.argv[1].lower() if command == "list": await list_admins() elif command == "add": if len(sys.argv) < 3: print("❌ Требуется указать Telegram ID") return try: telegram_id = int(sys.argv[2]) await add_admin(telegram_id) except ValueError: print("❌ Telegram ID должен быть числом") elif command == "remove": if len(sys.argv) < 3: print("❌ Требуется указать Telegram ID") return try: telegram_id = int(sys.argv[2]) await remove_admin(telegram_id) except ValueError: print("❌ Telegram ID должен быть числом") else: print(f"❌ Неизвестная команда: {command}") if __name__ == "__main__": asyncio.run(main())