58 lines
2.4 KiB
Python
58 lines
2.4 KiB
Python
import logging
|
||
from aiogram import Router, types
|
||
from aiogram.filters import Command
|
||
|
||
from bot.database.models import User as DbUser
|
||
from bot.database.db import (
|
||
get_wins_count,
|
||
get_total_games_count,
|
||
get_draw_count,
|
||
get_streak,
|
||
get_user_by_id
|
||
)
|
||
from bot.utils.helpers import get_partner
|
||
|
||
router = Router()
|
||
|
||
@router.message(Command("stats"))
|
||
async def handle_stats(message: types.Message, db_user: DbUser):
|
||
"""Обработчик команды /stats. Выводит статистику игры."""
|
||
partner = await get_partner(db_user.id)
|
||
if not partner:
|
||
await message.answer("Не могу показать статистику, так как не найден партнер.")
|
||
return
|
||
|
||
try:
|
||
total_games = await get_total_games_count(db_user.id, partner.id)
|
||
user_wins = await get_wins_count(db_user.id)
|
||
partner_wins = await get_wins_count(partner.id)
|
||
draws = await get_draw_count(db_user.id, partner.id)
|
||
user_streak = await get_streak(db_user.id)
|
||
partner_streak = await get_streak(partner.id)
|
||
|
||
except Exception as e:
|
||
logging.exception(f"Error fetching stats for user {db_user.id} and partner {partner.id}")
|
||
await message.answer("Произошла ошибка при получении статистики. Попробуйте позже.")
|
||
return
|
||
|
||
user_name = db_user.username or f"Игрок {db_user.telegram_id}"
|
||
partner_name = partner.username or f"Игрок {partner.telegram_id}"
|
||
|
||
stats_text = (
|
||
f"📊 <b>Статистика \"Кто больше любит?\"</b> ❤️\n\n"
|
||
f"<b>Всего сыграно игр:</b> {total_games}\n"
|
||
f"<i>(Завершенных игр между вами)</i>\n\n"
|
||
f"🏆 <b>Победы:</b>\n"
|
||
f" - {user_name}: {user_wins}\n"
|
||
f" - {partner_name}: {partner_wins}\n"
|
||
f" - Ничьи: {draws}\n\n"
|
||
f"🔥 <b>Серии побед (стрики):</b>\n"
|
||
f" - {user_name}:\n"
|
||
f" - Текущий: {user_streak.current_streak if user_streak else 0}\n"
|
||
f" - Макс.: {user_streak.max_streak if user_streak else 0}\n"
|
||
f" - {partner_name}:\n"
|
||
f" - Текущий: {partner_streak.current_streak if partner_streak else 0}\n"
|
||
f" - Макс.: {partner_streak.max_streak if partner_streak else 0}"
|
||
)
|
||
|
||
await message.answer(stats_text, parse_mode="HTML") |