From 9ca0ca2db2beda80990177049215cd79bd24b0a5 Mon Sep 17 00:00:00 2001 From: Egor Date: Sat, 6 Sep 2025 00:39:33 +0300 Subject: [PATCH] Update referrals.py --- app/handlers/admin/referrals.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/app/handlers/admin/referrals.py b/app/handlers/admin/referrals.py index c16d0548..b8b5bcd4 100644 --- a/app/handlers/admin/referrals.py +++ b/app/handlers/admin/referrals.py @@ -20,13 +20,16 @@ async def show_referral_statistics( db_user: User, db: AsyncSession ): + """Показать статистику реферальной системы""" try: stats = await get_referral_statistics(db) + # Вычисляем средний доход на реферера avg_per_referrer = 0 if stats.get('active_referrers', 0) > 0: avg_per_referrer = stats.get('total_paid_kopeks', 0) / stats['active_referrers'] + # Добавляем временную метку для принудительного обновления current_time = datetime.datetime.now().strftime("%H:%M:%S") text = f""" @@ -48,6 +51,7 @@ async def show_referral_statistics( Топ-5 рефереров: """ + # Добавляем топ рефереров top_referrers = stats.get('top_referrers', []) if top_referrers: for i, referrer in enumerate(top_referrers[:5], 1): @@ -55,6 +59,7 @@ async def show_referral_statistics( count = referrer.get('referrals_count', 0) user_id = referrer.get('user_id', 'N/A') + # Проверяем, что данные корректные if count > 0: text += f"{i}. ID {user_id}: {settings.format_price(earned)} ({count} реф.)\n" else: @@ -75,6 +80,7 @@ async def show_referral_statistics( 🕐 Обновлено: {current_time} """ + # Создаем клавиатуру keyboard = types.InlineKeyboardMarkup(inline_keyboard=[ [types.InlineKeyboardButton(text="🔄 Обновить", callback_data="admin_referrals")], [types.InlineKeyboardButton(text="👥 Топ рефереров", callback_data="admin_referrals_top")], @@ -82,10 +88,12 @@ async def show_referral_statistics( [types.InlineKeyboardButton(text="⬅️ Назад", callback_data="admin_panel")] ]) + # Пытаемся отредактировать сообщение, если не получается - просто отвечаем try: await callback.message.edit_text(text, reply_markup=keyboard) await callback.answer("Обновлено") except Exception as edit_error: + # Если сообщение не изменилось, просто отвечаем на callback if "message is not modified" in str(edit_error): await callback.answer("Данные актуальны") else: @@ -95,6 +103,7 @@ async def show_referral_statistics( except Exception as e: logger.error(f"Ошибка в show_referral_statistics: {e}", exc_info=True) + # Показываем базовую информацию в случае ошибки current_time = datetime.datetime.now().strftime("%H:%M:%S") text = f""" 🤝 Реферальная статистика @@ -130,6 +139,7 @@ async def show_top_referrers( db_user: User, db: AsyncSession ): + """Показать расширенный топ рефереров""" try: stats = await get_referral_statistics(db) top_referrers = stats.get('top_referrers', []) @@ -137,13 +147,14 @@ async def show_top_referrers( text = "🏆 Топ рефереров\n\n" if top_referrers: - for i, referrer in enumerate(top_referrers[:20], 1): + for i, referrer in enumerate(top_referrers[:20], 1): # Показываем топ-20 earned = referrer.get('total_earned_kopeks', 0) count = referrer.get('referrals_count', 0) display_name = referrer.get('display_name', 'N/A') username = referrer.get('username', '') telegram_id = referrer.get('telegram_id', 'N/A') + # Формируем отображаемое имя if username: display_text = f"@{username} (ID{telegram_id})" elif display_name and display_name != f"ID{telegram_id}": @@ -151,6 +162,7 @@ async def show_top_referrers( else: display_text = f"ID{telegram_id}" + # Добавляем эмодзи для топ-3 emoji = "" if i == 1: emoji = "🥇 "