diff --git a/handlers/admin/sender/sender_handler.py b/handlers/admin/sender/sender_handler.py
index 04e27320..e90e2780 100644
--- a/handlers/admin/sender/sender_handler.py
+++ b/handlers/admin/sender/sender_handler.py
@@ -1,4 +1,5 @@
import json
+import re
from datetime import datetime
from aiogram import F, Router
@@ -39,7 +40,9 @@ def parse_message_buttons(text: str) -> tuple[str, InlineKeyboardMarkup | None]:
for line in button_lines:
try:
- button_data = json.loads(line)
+ cleaned_line = re.sub(r'([^<]*)', r'\1', line)
+
+ button_data = json.loads(cleaned_line)
if not isinstance(button_data, dict) or "text" not in button_data:
logger.warning(f"Неверный формат кнопки: {line}")
@@ -107,6 +110,7 @@ async def handle_sender_callback_text(
"Ваше сообщение\n\n"
"BUTTONS:\n"
'{"text": "👤 Личный кабинет", "callback": "profile"}\n'
+ '{"text": "➕ Купить подписку", "callback": "buy"}\n'
'{"text": "🎁 Забрать купон", "url": "https://t.me/cupons"}\n'
'{"text": "📢 Канал", "url": "https://t.me/channel"}'
),
diff --git a/handlers/keys/key_mode/key_create.py b/handlers/keys/key_mode/key_create.py
index 400196e3..ec058791 100644
--- a/handlers/keys/key_mode/key_create.py
+++ b/handlers/keys/key_mode/key_create.py
@@ -56,6 +56,7 @@ class Form(FSMContext):
@router.callback_query(F.data == "create_key")
+@router.callback_query(F.data == "buy")
@router.message(F.text == "/buy")
async def confirm_create_new_key(
callback_query_or_message: CallbackQuery | Message, state: FSMContext, session: Any
diff --git a/handlers/keys/key_view.py b/handlers/keys/key_view.py
index f69f2142..00ba27d1 100644
--- a/handlers/keys/key_view.py
+++ b/handlers/keys/key_view.py
@@ -442,6 +442,7 @@ async def handle_reset_hwid(callback_query: CallbackQuery, session: Any):
@router.callback_query(F.data == "renew_menu")
+@router.callback_query(F.data == "extend")
@router.message(F.text == "/extend")
async def process_renew_menu(callback_query_or_message: CallbackQuery | Message, session: Any):
try: