From 79307b9791b7e92888b863ee670c24a93121e6a6 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 24 Nov 2025 23:48:29 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB=D1=91?= =?UTF-8?q?=D0=BD=20=D1=82=D0=B5=D0=BA=D1=81=D1=82=20=D0=BF=D1=80=D0=BE?= =?UTF-8?q?=D1=84=D0=B8=D0=BB=D1=8F=20=D0=B8=20=D1=81=D1=82=D0=B0=D1=82?= =?UTF-8?q?=D1=83=D1=81=20=D0=BF=D0=BE=D0=B4=D0=BF=D0=B8=D1=81=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- handlers/profile.py | 91 +++++++++++++++++++++++---------------------- 1 file changed, 46 insertions(+), 45 deletions(-) diff --git a/handlers/profile.py b/handlers/profile.py index 940ec51..cf005da 100644 --- a/handlers/profile.py +++ b/handlers/profile.py @@ -1,3 +1,5 @@ +# Профиль. последнее изменение 24.11.2025 + from aiogram import Router, types from aiogram.types import CallbackQuery import logging @@ -32,7 +34,8 @@ async def call_api(method, endpoint, data=None): async with aiohttp.ClientSession() as session: async with session.request(method, url, json=data) as response: logger.info( - f"Получен ответ от {url}: статус {response.status}") + f"Получен ответ от {url}: статус {response.status}" + ) if response.status in {200, 201}: result = await response.json() @@ -54,7 +57,7 @@ async def call_api(method, endpoint, data=None): async def profile_callback_handler(callback: CallbackQuery): """ Профиль пользователя. - Логика работы с API сохранена, переписан только текст/визуал. + Логика работы с API сохранена, изменён только текст/визуал (как в профиле Михаила). """ try: user_data = await call_api("GET", f"/user/{callback.from_user.id}") @@ -65,55 +68,46 @@ async def profile_callback_handler(callback: CallbackQuery): await callback.answer() return - sub_data = await call_api("GET", f"/subscription/{user_data['id']}/last") + # Последняя подписка пользователя + sub_data = await call_api( + "GET", f"/subscription/{user_data['id']}/last" + ) if sub_data == "ERROR" or not isinstance(sub_data, dict): sub_data = None - balance_text = f"💰 Баланс: {user_data['balance']} ₽" + username = callback.from_user.username or "-" + balance = user_data.get("balance", 0) - username = callback.from_user.username or "пользователь" + # Определяем статус подписки + sub_status = "⚫ Нет активных" - # Нет подписки - if not sub_data: - text = ( - f"📜 Профиль {username}\n\n" - f"{balance_text}\n\n" - "У тебя пока нет активной подписки.\n" - "Пополняй баланс и подключай тариф Lark, чтобы получить статус 🐣 или 🦅." - ) - else: + if sub_data: expiry_date = sub_data.get("expiry_date") - formatted_date = ( - datetime.fromisoformat(expiry_date).strftime("%d %B %Y г.") - if expiry_date - else None - ) - is_expired = ( - datetime.fromisoformat(expiry_date) < datetime.now() - if expiry_date - else True - ) - status_icon = "✖️" if is_expired else "☑️" - profile_status = "🦅" if "Pro" in sub_data.get("plan", "") else "🐣" - - if not is_expired and formatted_date: - sub_text = ( - f"Подписка активна до {formatted_date} {status_icon}\n" - f"Текущий статус: {profile_status}" - ) + if expiry_date: + try: + is_expired = datetime.fromisoformat( + expiry_date) < datetime.now() + except ValueError: + is_expired = True else: - sub_text = ( - f"Подписка неактивна {status_icon}\n" - "Ты можешь продлить её в разделе подписок." - ) + is_expired = True - text = ( - f"📜 Профиль {username} {profile_status}\n\n" - f"{sub_text}\n\n" - f"{balance_text}" - ) + if not is_expired: + sub_status = "🟢 Активна" - await callback.message.edit_text(text, reply_markup=account_keyboard()) + text = ( + "🥚 Профиль\n\n" + f"Пользователь: @{username}\n" + f"Баланс: {balance} ₽\n" + f"Статус подписки: {sub_status}\n\n" + "Выберите действие:" + ) + + await callback.message.edit_text( + text, + parse_mode=ParseMode.HTML, + reply_markup=account_keyboard(), + ) except Exception as e: logger.exception(f"Ошибка в обработчике профиля: {e}") await callback.message.answer("Произошла ошибка. Попробуйте позже.") @@ -175,7 +169,9 @@ async def tranhist_callback_handler(callback: CallbackQuery): return try: - transactions = await call_api("GET", f"/user/{user_data['id']}/transactions") + transactions = await call_api( + "GET", f"/user/{user_data['id']}/transactions" + ) if not transactions: await callback.message.edit_text( "У вас нет транзакций.", reply_markup=tranhist_keyboard() @@ -200,7 +196,9 @@ async def tranhist_callback_handler(callback: CallbackQuery): ) except Exception as e: logger.error(f"Ошибка обработки транзакций: {e}") - await callback.message.edit_text("Произошла ошибка. Попробуйте позже.") + await callback.message.edit_text( + "Произошла ошибка. Попробуйте позже." + ) finally: await callback.answer() @@ -223,7 +221,10 @@ async def popup_confirm_callback_handler(callback: CallbackQuery): await callback.answer() return - text = f"✅ Баланс пополнен на {popup_info} ₽. Спасибо, что остаёшься с Lark." + text = ( + f"✅ Баланс пополнен на {popup_info} ₽. " + "Спасибо, что остаёшься с Lark." + ) await callback.message.edit_text( text=text, reply_markup=confirm_popup_keyboard() )