from aiogram import Router, types from aiogram.filters import Command from aiogram.types import Message, CallbackQuery import logging from instences.config import BASE_URL_FASTAPI import aiohttp from keyboard.keyboards import main_keyboard router = Router() logger = logging.getLogger(__name__) async def call_api(method, endpoint, data=None): """ Выполняет HTTP-запрос к FastAPI. :param method: HTTP метод (GET, POST, и т.д.) :param endpoint: конечная точка API :param data: тело запроса (если необходимо) :return: JSON-ответ или "ERROR" при неуспехе """ url = f"{BASE_URL_FASTAPI}{endpoint}" logger.info(f"Инициализация запроса: {method} {url} с данными {data}") try: async with aiohttp.ClientSession() as session: async with session.request(method, url, json=data) as response: logger.info(f"Получен ответ от {url}: статус {response.status}") if response.status in {200, 201}: result = await response.json() logger.debug(f"Ответ JSON: {result}") return result if response.status == 404: logger.debug(f"Код {response.status}, возвращаю ничего") return None logger.error(f"Ошибка в запросе: статус {response.status}, причина {response.reason}") return "ERROR" except Exception as e: logger.exception(f"Исключение при выполнении запроса к {url}: {e}") return "ERROR" @router.message(Command("start")) async def start_command(message: Message): """ Обработчик команды /start. """ logger.info(f"Получена команда /start от пользователя: {message.from_user.id} ({message.from_user.username})") try: user_data = await call_api("GET", f"/user/{message.from_user.id}") if not user_data: logger.debug("Пользователь не найден в базе, создаем новую запись.") await call_api("POST", "/user/create", {"telegram_id": message.from_user.id}) logger.debug("Отправка приветственного сообщения пользователю.") await message.answer( f"""Приветствуем в рядах птенец {message.from_user.username}🐣 \nСкорее пополни баланс, приобрети подписку и получай доступ к TikTok, YouTube, Discord, Instagram на всех устройствах без ограничений ❕❕❕ \nОзнакомься с руководством по пользованию и выбери подходящий тариф 🦅 \nСледи за акциями, спец-предложениями, а также розыгрышами по ссылке ниже \n👇👇👇 \nhttps://t.me/+0z5xqn3F1m02OTJi \nС любовью ваши пернатые разработчики 🤍🤍🤍""", reply_markup=main_keyboard() ) logger.info("Приветственное сообщение отправлено.") except Exception as e: logger.exception(f"Ошибка при обработке команды /start для пользователя {message.from_user.id}: {e}") await message.answer("Произошла ошибка. Попробуйте позже.") @router.callback_query(lambda callback: callback.data == "base") async def start_callback_handler(callback: CallbackQuery): """ Обработчик callback_query с data="base". """ try: user_data = await call_api("GET", f"/user/{callback.from_user.id}") if not user_data: await call_api("POST", "/user/create", {"telegram_id": callback.from_user.id}) await callback.message.edit_text( f"""Приветствуем в рядах птенец {callback.from_user.username}🐣 \nСкорее пополни баланс, приобрети подписку и получай доступ к TikTok, YouTube, Discord, Instagram на всех устройствах без ограничений ❕❕❕ \nОзнакомься с руководством по пользованию и выбери подходящий тариф 🦅 \nСледи за акциями, спец-предложениями, а также розыгрышами по ссылке ниже \n👇👇👇 \nhttps://t.me/+0z5xqn3F1m02OTJi \nС любовью ваши пернатые разработчики 🤍🤍🤍""", reply_markup=main_keyboard() ) except Exception as e: logger.exception(f"Ошибка при обработке callback с data='base': {e}") await callback.message.answer("Произошла ошибка. Попробуйте позже.") finally: await callback.answer()