diff --git a/handlers/start.py b/handlers/start.py index 3debb69..570ac30 100644 --- a/handlers/start.py +++ b/handlers/start.py @@ -1,21 +1,21 @@ from aiogram import Router, types +from aiogram.types import Message, CallbackQuery from aiogram.filters import Command from aiogram.enums.parse_mode import ParseMode import logging import aiohttp -from aiogram.types import Message, CallbackQuery - from instences.config import BASE_URL_FASTAPI from keyboard.keyboards import main_keyboard -from .referrals import _build_referral_text router = Router() logger = logging.getLogger(__name__) async def call_api(method: str, endpoint: str, data: dict | None = None): - """Мини-обёртка для запросов к backend API.""" + """ + Мини-обёртка для запросов к backend API. + """ url = f"{BASE_URL_FASTAPI}{endpoint}" logger.info(f"API {method} {url} data={data}") @@ -30,9 +30,7 @@ async def call_api(method: str, endpoint: str, data: dict | None = None): return await resp.json() except Exception: return None - logger.error( - f"Unexpected status {resp.status}: {await resp.text()}" - ) + logger.error(f"Unexpected status {resp.status}: {await resp.text()}") return "ERROR" except Exception as e: logger.exception(f"API exception {url}: {e}") @@ -40,12 +38,15 @@ async def call_api(method: str, endpoint: str, data: dict | None = None): def _welcome_text(username: str | None) -> str: - """Текст приветствия в /start и в главном меню.""" + """ + Текст приветствия в /start и в главном меню. + """ return "🥚 Lark Security\n\nВыберите действие из меню ниже." def _parse_referrer_id(message: Message) -> int | None: - """Достаём ref_ из /start. + """ + Достаём ref_ из /start. Примеры: /start @@ -72,11 +73,12 @@ def _parse_referrer_id(message: Message) -> int | None: @router.message(Command("start")) async def start_command(message: Message): - """/start с обработкой реферального параметра. + """ + /start c обработкой реферального параметра. Логика: - проверяем, есть ли пользователь в БД по telegram_id; - - если нет — создаём через /user/create; + - если нет — создаём /user/create; - если есть корректный ref_ и пользователь новый — вызываем /user/{referrer_id}/add_referral с invited_id = telegram_id. """ @@ -90,11 +92,9 @@ async def start_command(message: Message): ) try: - # 1. Проверяем, есть ли пользователь в БД existing = await call_api("GET", f"/user/{user_id}") user_exists = existing not in (None, "ERROR") - # 2. Если пользователя нет — создаём if not user_exists: logger.debug(f"[start] Пользователь {user_id} не найден, создаю.") create_result = await call_api( @@ -107,9 +107,7 @@ async def start_command(message: Message): f"[start] Не удалось создать пользователя {user_id} в БД" ) - # 3. Обработка рефералки, если параметр есть if referrer_id is not None: - # 3.1. Самореферал if referrer_id == user_id: logger.info( f"[start] Пользователь {user_id} попытался зайти " @@ -119,7 +117,6 @@ async def start_command(message: Message): "Нельзя переходить по своей же реферальной ссылке." ) - # 3.2. Пользователь уже зарегистрирован в боте elif user_exists: logger.info( f"[start] Пользователь {user_id} уже есть в БД, " @@ -130,7 +127,6 @@ async def start_command(message: Message): "реферальная ссылка не сработает." ) - # 3.3. Новый пользователь + чужая рефералка → регистрируем реферал else: payload = { "invited_id": user_id, @@ -152,7 +148,6 @@ async def start_command(message: Message): ) await message.answer("Вы вошли по реферальной ссылке.") - # 4. В любом случае показываем главное меню await message.answer( _welcome_text(username), reply_markup=main_keyboard(), @@ -166,31 +161,11 @@ async def start_command(message: Message): await message.answer("Произошла ошибка. Попробуйте позже.") -@router.message(Command("referrals")) -async def referrals_menu_command(message: Message): - """Команда /referrals из бокового меню Telegram. - - Показывает текст реферальной программы. - """ - logger.info( - f"[start] Команда /referrals от {message.from_user.id} " - f"(@{message.from_user.username})" - ) - try: - text = await _build_referral_text(message.bot, message.from_user.id) - await message.answer(text, parse_mode=ParseMode.HTML) - logger.info("[start] Реферальная программа отправлена пользователю.") - except Exception as e: - logger.exception( - f"[start] Ошибка при обработке /referrals для пользователя " - f"{message.from_user.id}: {e}" - ) - await message.answer("Произошла ошибка. Попробуйте позже.") - - @router.callback_query(lambda callback: callback.data == "base") async def start_callback_handler(callback: CallbackQuery): - """Callback с data="base" — возврат в главное меню.""" + """ + Callback с data="base" — возврат в главное меню. + """ try: user_id = callback.from_user.id username = callback.from_user.username diff --git a/handlers/subscriptions.py b/handlers/subscriptions.py index ac8cc6b..2140ad9 100644 --- a/handlers/subscriptions.py +++ b/handlers/subscriptions.py @@ -78,7 +78,7 @@ async def _fetch_user_and_subs(telegram_id: int): if not user or not isinstance(user, dict): return None, [] - user_id = user["telegram_id"] + user_id = user["id"] subs = await call_api("GET", f"/subscriptions/{user_id}") if subs == "ERROR" or not isinstance(subs, list):