From 585ee2d42b2a7c1cf3bfecb1e4fe932ef2f7a89b Mon Sep 17 00:00:00 2001 From: Fr1ngg Date: Sun, 10 Aug 2025 10:11:12 +0300 Subject: [PATCH] Update handlers.py --- handlers.py | 72 ++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 60 insertions(+), 12 deletions(-) diff --git a/handlers.py b/handlers.py index 6818be8a..2c82f5bf 100644 --- a/handlers.py +++ b/handlers.py @@ -14,6 +14,7 @@ from keyboards import * from translations import t from utils import * from config import * +from stars_handlers import stars_router import base64 import json from referral_utils import ( @@ -415,13 +416,25 @@ async def balance_callback(callback: CallbackQuery, **kwargs): @router.callback_query(F.data == "topup_balance") async def topup_balance_callback(callback: CallbackQuery, **kwargs): user = kwargs.get('user') + config = kwargs.get('config') + if not user: await callback.answer("❌ Ошибка пользователя") return + # Проверяем, включены ли Telegram Stars + stars_enabled = config and config.STARS_ENABLED and config.STARS_RATES + + text = t('topup_balance', user.language) + + if stars_enabled: + text += "\n\n⭐ **Новинка!** Теперь можно пополнять баланс через Telegram Stars!" + text += "\n💎 Быстро, безопасно, без комиссий!" + await callback.message.edit_text( - t('topup_balance', user.language), - reply_markup=topup_keyboard(user.language) + text, + reply_markup=topup_keyboard(user.language), + parse_mode='Markdown' ) @router.callback_query(F.data == "topup_card") @@ -520,21 +533,56 @@ async def payment_history_callback(callback: CallbackQuery, db: Database, **kwar return try: + # Получаем обычные платежи payments = await db.get_user_payments(user.telegram_id) - if not payments: + # Получаем платежи через звезды + star_payments = await db.get_user_star_payments(user.telegram_id, 5) + + if not payments and not star_payments: text = t('no_payments', user.language) else: text = "📊 " + t('payment_history', user.language) + ":\n\n" - for payment in payments[:10]: - date_str = format_datetime(payment.created_at, user.language) - status = format_payment_status(payment.status, user.language) - text += t('payment_item', user.language, - date=date_str, - amount=payment.amount, - description=payment.description, - status=status - ) + "\n" + + # Объединяем и сортируем все платежи по дате + all_payments = [] + + for payment in payments[:10]: + all_payments.append({ + 'type': 'regular', + 'date': payment.created_at, + 'amount': payment.amount, + 'description': payment.description, + 'status': payment.status + }) + + for star_payment in star_payments: + if star_payment.status == 'completed': + all_payments.append({ + 'type': 'stars', + 'date': star_payment.completed_at or star_payment.created_at, + 'amount': star_payment.rub_amount, + 'description': f'Пополнение через Stars ({star_payment.stars_amount} ⭐)', + 'status': star_payment.status, + 'stars': star_payment.stars_amount + }) + + # Сортируем по дате (новые сначала) + all_payments.sort(key=lambda x: x['date'], reverse=True) + + # Показываем последние 10 платежей + for payment in all_payments[:10]: + date_str = format_datetime(payment['date'], user.language) + status = format_payment_status(payment['status'], user.language) + + if payment['type'] == 'stars': + text += f"⭐ +{payment['amount']:.0f}₽ ({payment['stars']} ⭐)\n" + else: + amount_str = f"+{payment['amount']}" if payment['amount'] > 0 else str(payment['amount']) + text += f"💳 {amount_str}₽\n" + + text += f" 📅 {date_str} | {status}\n" + text += f" 📝 {payment['description']}\n\n" await callback.message.edit_text( text,