From 87ef82ef7fc02ad54bbd5450c3fb3339942480ac Mon Sep 17 00:00:00 2001 From: vrubelroman Date: Fri, 3 Jul 2026 13:48:28 +0000 Subject: [PATCH] fix(admin_bot): align /stat output and expand top list to 10 Per-line strip() only stripped the first line's leading spaces, leaving subsequent lines indented differently. RTL names (Arabic etc.) also flipped the number/counter to the right via Telegram's bidi handling. --- admin_bot.py | 39 +++++++++++++++++++-------------------- 1 file changed, 19 insertions(+), 20 deletions(-) diff --git a/admin_bot.py b/admin_bot.py index 47ff88c..97ece9f 100644 --- a/admin_bot.py +++ b/admin_bot.py @@ -212,11 +212,10 @@ async def stat_command(update: Update, context: ContextTypes.DEFAULT_TYPE): total_downloads = get_total_downloads() total_users = get_total_users() users_sent_link = get_users_sent_link_count() - top_users = get_top_active_users(5) + top_users = get_top_active_users(10) error_stats = get_error_stats() # Форматируем статистику ошибок - error_stats_text = "" service_names = { 'youtube': 'YouTube', 'instagram': 'Instagram', @@ -226,32 +225,32 @@ async def stat_command(update: Update, context: ContextTypes.DEFAULT_TYPE): 'unknown': 'Unknown' } - for service, count in sorted(error_stats.items()): - if count > 0: - service_name = service_names.get(service, service) - error_stats_text += f" • {service_name}: {count}\n" + error_lines = [ + f"• {service_names.get(service, service)}: {count}" + for service, count in sorted(error_stats.items()) + if count > 0 + ] + error_stats_text = "\n".join(error_lines) if error_lines else "Нет ошибок" - if not error_stats_text: - error_stats_text = " Нет ошибок" - - # Форматируем топ активных пользователей - top_users_text = "" - for i, (uid, username, first_name, link_count) in enumerate(top_users, start=1): - display_name = f"@{username}" if username else (first_name or str(uid)) - top_users_text += f" {i}. {display_name} — {link_count}\n" - - if not top_users_text: - top_users_text = " Пока никто не отправлял ссылки" + # Форматируем топ активных пользователей. + # ‎ (LRM) перед каждой строкой не даёт Telegram переразвернуть строку + # справа налево из-за RTL-символов в имени (арабский и т.п.) — иначе номер + # и счётчик "уезжают" вправо и ломают выравнивание списка. + top_lines = [ + f"‎{i}. {('@' + username) if username else (first_name or str(uid))} — {link_count}" + for i, (uid, username, first_name, link_count) in enumerate(top_users, start=1) + ] + top_users_text = "\n".join(top_lines) if top_lines else "Пока никто не отправлял ссылки" stat_message = ( f"📊 Статистика бота:\n\n" f"👥 Всего пользователей: {total_users}\n" f"🔗 Отправляли ссылки: {users_sent_link}\n" f"📹 Всего скачано видео: {total_downloads}\n\n" - f"🏆 Топ-5 активных пользователей:\n{top_users_text.strip()}\n\n" - f"❌ Ошибки по сервисам:\n{error_stats_text.strip()}" + f"🏆 Топ-10 активных пользователей:\n{top_users_text}\n\n" + f"❌ Ошибки по сервисам:\n{error_stats_text}" ) - + await update.message.reply_text(stat_message)