From 9074876e3d4b1cfbbbbd5d0fae98e2e3ca32d3a1 Mon Sep 17 00:00:00 2001 From: Capybara-z Date: Mon, 1 Sep 2025 15:36:02 +0300 Subject: [PATCH] Fixed hot leads export count mismatch \ Fixed ban message formatting for popup alerts \ Fixed user deletion back button navigation --- handlers/admin/users/users_handler.py | 5 +++-- middlewares/ban_checker.py | 18 ++++++++++++++---- utils/csv_export.py | 10 ++++++++-- 3 files changed, 25 insertions(+), 8 deletions(-) diff --git a/handlers/admin/users/users_handler.py b/handlers/admin/users/users_handler.py index 8c18d36f..d4542ba6 100644 --- a/handlers/admin/users/users_handler.py +++ b/handlers/admin/users/users_handler.py @@ -1114,12 +1114,13 @@ async def handle_delete_user_confirm( await callback_query.message.edit_text( text=f"🗑️ Пользователь с ID {tg_id} был удален.", - reply_markup=build_editor_kb(callback_data.tg_id), + reply_markup=build_admin_back_kb(), ) except Exception as e: logger.error(f"Ошибка при удалении данных из базы данных для пользователя {tg_id}: {e}") await callback_query.message.edit_text( - text=f"❌ Произошла ошибка при удалении пользователя с ID {tg_id}. Попробуйте снова." + text=f"❌ Произошла ошибка при удалении пользователя с ID {tg_id}. Попробуйте снова.", + reply_markup=build_admin_back_kb(), ) diff --git a/middlewares/ban_checker.py b/middlewares/ban_checker.py index 2bbf00de..c533dba6 100644 --- a/middlewares/ban_checker.py +++ b/middlewares/ban_checker.py @@ -65,21 +65,31 @@ class BanCheckerMiddleware(BaseMiddleware): if until: until_local = until.astimezone(TZ).strftime("%Y-%m-%d %H:%M") - text = ( + text_html = ( f"🚫 Вы заблокированы до {until_local} по МСК.\n" f"📄 Причина: {reason}\n\n" f"Если вы считаете, что это ошибка, обратитесь в поддержку: {SUPPORT_CHAT_URL}" ) + text_plain = ( + f"🚫 Вы заблокированы до {until_local} по МСК.\n" + f"📄 Причина: {reason}\n\n" + f"Если вы считаете, что это ошибка, обратитесь в поддержку: {SUPPORT_CHAT_URL}" + ) else: - text = ( + text_html = ( f"🚫 Вы заблокированы навсегда.\n" f"📄 Причина: {reason}\n\n" f"Если вы считаете, что это ошибка, обратитесь в поддержку: {SUPPORT_CHAT_URL}" ) + text_plain = ( + f"🚫 Вы заблокированы навсегда.\n" + f"📄 Причина: {reason}\n\n" + f"Если вы считаете, что это ошибка, обратитесь в поддержку: {SUPPORT_CHAT_URL}" + ) if isinstance(obj, Message): - await obj.answer(text, parse_mode="HTML") + await obj.answer(text_html, parse_mode="HTML") elif isinstance(obj, CallbackQuery): - await obj.answer(text, show_alert=True) + await obj.answer(text_plain, show_alert=True) return return await handler(event, data) diff --git a/utils/csv_export.py b/utils/csv_export.py index 32425cac..92a2f781 100644 --- a/utils/csv_export.py +++ b/utils/csv_export.py @@ -164,8 +164,14 @@ async def export_hot_leads_csv(session: AsyncSession) -> BufferedInputFile: User.updated_at, ) .where( - exists(select(Payment.tg_id).where(Payment.tg_id == User.tg_id).where(Payment.status == "success")), - not_(exists(select(Key.client_id).where(Key.tg_id == User.tg_id).where(Key.expiry_time > now_ts))), + exists( + select(Payment.tg_id) + .where(Payment.tg_id == User.tg_id) + .where(Payment.status == "success") + .where(Payment.amount > 0) + .where(Payment.payment_system.notin_(["referral", "coupon", "cashback"])) + ), + not_(exists(select(Key.tg_id).where(Key.tg_id == User.tg_id).where(Key.expiry_time > now_ts))), ) .order_by(User.updated_at.desc()) )