diff --git a/handlers/subscriptions.py b/handlers/subscriptions.py index bc85850..d82a9c3 100644 --- a/handlers/subscriptions.py +++ b/handlers/subscriptions.py @@ -26,34 +26,60 @@ async def call_api(method, endpoint, data=None): logger.debug(f"Ответ JSON: {result}") return result if response.status in {404,400}: - logger.debug(f"Код {response.status}, возвращаю ничего") - return await response.json() + result = await response.json() + logger.debug(f"Код {response.status}, возвращаю {result}") + return result logger.error(f"Ошибка в запросе: статус {response.status}, причина {response.reason}") return "ERROR" except Exception as e: logger.exception(f"Исключение при выполнении запроса к {url}: {e}") return "ERROR" - + +def escape_markdown_v2(text: str) -> str: + """ + Экранирует специальные символы для Markdown_V2. + """ + special_chars = r"_*[]()~`>#+-=|{}.!" + for char in special_chars: + text = text.replace(char, f"\\{char}") + return text + @router.message(Command("subscriptions")) async def supp(message: types.Message): """ - Меню сапп системы + Меню системы подписок """ text = "" - result = await call_api("GET", f"/uri?telegram_id={message.from_user.id}") - uri = result.get('detail',"Error") - if uri == "SUB_ERROR": - text = f"Вы ещё не приобрели подписки!!" - elif "vless" in uri: - text = f"Ваша подписка:```{uri}```" - else: - text = "Произошла ошибка при получении URI" + uri = None # Инициализация переменной + try: + # Вызов API для получения URI + result = await call_api("GET", f"/uri?telegram_id={message.from_user.id}") + uri = result.get('detail', "Error") # Получаем URI из ответа или "Error", если ключ отсутствует + + # Проверка результата + if uri == "Error": + text = escape_markdown_v2("Произошла ошибка при получении URI") + elif uri == "SUB_ERROR": + text = escape_markdown_v2("Вы ещё не приобрели подписки!!") + elif "vless" in uri: + escaped_uri = escape_markdown_v2(uri) # Экранирование URI + text = f"Ваша подписка: ```{escaped_uri}```" + else: + text = escape_markdown_v2("Произошла ошибка при обработке URI") + except Exception as e: + # Логирование ошибок + logger.error(f"Ошибка при вызове API для подписки: {e}") + text = escape_markdown_v2("Произошла неожиданная ошибка при получении подписки.") + + # Ответ пользователю await message.answer( text, parse_mode=ParseMode.MARKDOWN_V2 ) + + @router.callback_query(lambda callback: callback.data == "buy_subscription") async def buy_subscription_callback_handler(callback: types.CallbackQuery): """ diff --git a/main.py b/main.py index c1f3a32..32f006c 100644 --- a/main.py +++ b/main.py @@ -23,7 +23,7 @@ dp.message.middleware(AntiSpamMiddleware(rate_limit=1)) async def set_commands(): """Устанавливает команды для бота.""" commands = [ - BotCommand(command="/start", description="🥚Запустить бота"), + BotCommand(command="/start", description="🥚Главное меню"), BotCommand(command="/subscriptions", description="🦴Мои подписки"), BotCommand(command="/support", description="❕Поддержка❕"), ]