init commit
This commit is contained in:
124
utils.py
Normal file
124
utils.py
Normal file
@@ -0,0 +1,124 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Утилиты для управления ботом
|
||||
"""
|
||||
import asyncio
|
||||
import sys
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
from database import async_session_maker, init_db
|
||||
from services import UserService
|
||||
from config import ADMIN_IDS
|
||||
|
||||
|
||||
async def setup_admin_users():
|
||||
"""Установить права администратора для пользователей из ADMIN_IDS"""
|
||||
if not ADMIN_IDS:
|
||||
print("❌ Список ADMIN_IDS пуст")
|
||||
return
|
||||
|
||||
async with async_session_maker() as session:
|
||||
for admin_id in ADMIN_IDS:
|
||||
success = await UserService.set_admin(session, admin_id, True)
|
||||
if success:
|
||||
print(f"✅ Права администратора установлены для ID: {admin_id}")
|
||||
else:
|
||||
print(f"⚠️ Пользователь с ID {admin_id} не найден в базе")
|
||||
|
||||
|
||||
async def create_sample_lottery():
|
||||
"""Создать пример розыгрыша для тестирования"""
|
||||
from services import LotteryService
|
||||
|
||||
async with async_session_maker() as session:
|
||||
# Берем первого администратора как создателя
|
||||
if not ADMIN_IDS:
|
||||
print("❌ Нет администраторов для создания розыгрыша")
|
||||
return
|
||||
|
||||
admin_user = await UserService.get_user_by_telegram_id(session, ADMIN_IDS[0])
|
||||
if not admin_user:
|
||||
print("❌ Пользователь-администратор не найден в базе")
|
||||
return
|
||||
|
||||
lottery = await LotteryService.create_lottery(
|
||||
session,
|
||||
title="🎉 Тестовый розыгрыш",
|
||||
description="Это тестовый розыгрыш для демонстрации работы бота",
|
||||
prizes=[
|
||||
"🥇 Главный приз - 10,000 рублей",
|
||||
"🥈 Второй приз - iPhone 15",
|
||||
"🥉 Третий приз - AirPods Pro"
|
||||
],
|
||||
creator_id=admin_user.id
|
||||
)
|
||||
|
||||
print(f"✅ Создан тестовый розыгрыш с ID: {lottery.id}")
|
||||
print(f"📝 Название: {lottery.title}")
|
||||
|
||||
|
||||
async def init_database():
|
||||
"""Инициализация базы данных"""
|
||||
print("🔄 Инициализация базы данных...")
|
||||
await init_db()
|
||||
print("✅ База данных инициализирована")
|
||||
|
||||
|
||||
async def show_stats():
|
||||
"""Показать статистику бота"""
|
||||
from services import LotteryService, ParticipationService
|
||||
from models import User, Lottery, Participation
|
||||
from sqlalchemy import select, func
|
||||
|
||||
async with async_session_maker() as session:
|
||||
# Количество пользователей
|
||||
result = await session.execute(select(func.count(User.id)))
|
||||
users_count = result.scalar()
|
||||
|
||||
# Количество розыгрышей
|
||||
result = await session.execute(select(func.count(Lottery.id)))
|
||||
lotteries_count = result.scalar()
|
||||
|
||||
# Количество активных розыгрышей
|
||||
result = await session.execute(
|
||||
select(func.count(Lottery.id))
|
||||
.where(Lottery.is_active == True, Lottery.is_completed == False)
|
||||
)
|
||||
active_lotteries = result.scalar()
|
||||
|
||||
# Количество участий
|
||||
result = await session.execute(select(func.count(Participation.id)))
|
||||
participations_count = result.scalar()
|
||||
|
||||
print("\n📊 Статистика бота:")
|
||||
print(f"👥 Всего пользователей: {users_count}")
|
||||
print(f"🎲 Всего розыгрышей: {lotteries_count}")
|
||||
print(f"🟢 Активных розыгрышей: {active_lotteries}")
|
||||
print(f"🎫 Всего участий: {participations_count}")
|
||||
|
||||
|
||||
def main():
|
||||
"""Главная функция утилиты"""
|
||||
if len(sys.argv) < 2:
|
||||
print("Использование:")
|
||||
print(" python utils.py init - Инициализация базы данных")
|
||||
print(" python utils.py setup-admins - Установка прав администратора")
|
||||
print(" python utils.py sample - Создание тестового розыгрыша")
|
||||
print(" python utils.py stats - Показать статистику")
|
||||
return
|
||||
|
||||
command = sys.argv[1]
|
||||
|
||||
if command == "init":
|
||||
asyncio.run(init_database())
|
||||
elif command == "setup-admins":
|
||||
asyncio.run(setup_admin_users())
|
||||
elif command == "sample":
|
||||
asyncio.run(create_sample_lottery())
|
||||
elif command == "stats":
|
||||
asyncio.run(show_stats())
|
||||
else:
|
||||
print(f"❌ Неизвестная команда: {command}")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user