love-bot/bot/handlers/stats.py

58 lines
2.4 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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")