110 lines
3.6 KiB
Python
110 lines
3.6 KiB
Python
#!/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 <id> - Добавить администратора (по Telegram ID)
|
|
remove <id> - Удалить администратора (по 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())
|