diff --git a/handlers/instructions/instructions.py b/handlers/instructions/instructions.py index 5daf3d5c..7ffb3ab3 100644 --- a/handlers/instructions/instructions.py +++ b/handlers/instructions/instructions.py @@ -82,7 +82,7 @@ async def process_connect_pc(callback_query: CallbackQuery, session: Any): builder = InlineKeyboardBuilder() builder.row(InlineKeyboardButton(text=PC_PC, callback_data=f"windows_menu|{key_name}")) builder.row(InlineKeyboardButton(text=PC_MACOS, callback_data=f"macos_menu|{key_name}")) - builder.row(InlineKeyboardButton(text=BACK, callback_data=f"connect_device|{key_name}")) + builder.row(InlineKeyboardButton(text=BACK, callback_data=f"view_key|{key_name}")) await edit_or_send_message( target_message=callback_query.message, @@ -142,7 +142,7 @@ async def process_connect_tv(callback_query: CallbackQuery, session: Any): builder = InlineKeyboardBuilder() builder.row(InlineKeyboardButton(text=TV_CONTINUE, callback_data=f"continue_tv|{key_name}")) - builder.row(InlineKeyboardButton(text=BACK, callback_data=f"connect_device|{key_name}")) + builder.row(InlineKeyboardButton(text=BACK, callback_data=f"view_key|{key_name}")) builder.row(InlineKeyboardButton(text=MAIN_MENU, callback_data="profile")) await edit_or_send_message( diff --git a/handlers/keys/key_mode/key_cluster_mode.py b/handlers/keys/key_mode/key_cluster_mode.py index 60aebc26..f5f2942a 100644 --- a/handlers/keys/key_mode/key_cluster_mode.py +++ b/handlers/keys/key_mode/key_cluster_mode.py @@ -40,6 +40,8 @@ from handlers.utils import ( get_least_loaded_cluster, is_full_remnawave_cluster, ) +from hooks.hooks import run_hooks +from hooks.hook_buttons import insert_hook_buttons from logger import logger @@ -170,6 +172,13 @@ async def key_cluster_mode( builder.row(InlineKeyboardButton(text=SUPPORT, url=SUPPORT_CHAT_URL)) builder.row(InlineKeyboardButton(text=MAIN_MENU, callback_data="profile")) + try: + hook_commands = await run_hooks("key_creation_complete", chat_id=tg_id, admin=False, session=session, email=email, key_name=key_name) + if hook_commands: + builder = insert_hook_buttons(builder, hook_commands) + except Exception as e: + logger.warning(f"[KEY_CREATION_COMPLETE] Ошибка при применении хуков: {e}") + expiry_time_local = expiry_time.astimezone(moscow_tz) expiry_time_local - datetime.now(moscow_tz) diff --git a/handlers/keys/key_mode/key_country_mode.py b/handlers/keys/key_mode/key_country_mode.py index 47ac4ea4..0be75f32 100644 --- a/handlers/keys/key_mode/key_country_mode.py +++ b/handlers/keys/key_mode/key_country_mode.py @@ -44,6 +44,8 @@ from handlers.utils import ( get_least_loaded_cluster, is_full_remnawave_cluster, ) +from hooks.hooks import run_hooks +from hooks.hook_buttons import insert_hook_buttons from logger import logger from panels.remnawave import RemnawaveAPI from panels.three_xui import delete_client, get_xui_instance @@ -498,6 +500,13 @@ async def finalize_key_creation( builder.row(InlineKeyboardButton(text=SUPPORT, url=SUPPORT_CHAT_URL)) builder.row(InlineKeyboardButton(text=MAIN_MENU, callback_data="profile")) + try: + hook_commands = await run_hooks("key_creation_complete", chat_id=tg_id, admin=False, session=session, email=email, key_name=key_name) + if hook_commands: + builder = insert_hook_buttons(builder, hook_commands) + except Exception as e: + logger.warning(f"[KEY_CREATION_COMPLETE] Ошибка при применении хуков: {e}") + link_to_show = public_link or remnawave_link or "Ссылка не найдена" tariff_info = None diff --git a/handlers/keys/key_renew.py b/handlers/keys/key_renew.py index 10d42ee4..3c288c92 100644 --- a/handlers/keys/key_renew.py +++ b/handlers/keys/key_renew.py @@ -405,6 +405,13 @@ async def complete_key_renewal( builder = InlineKeyboardBuilder() builder.row(InlineKeyboardButton(text=MY_SUB, callback_data=f"view_key|{email}")) + try: + hook_commands = await run_hooks("renewal_complete", chat_id=tg_id, admin=False, session=session, email=email, client_id=client_id) + if hook_commands: + builder = insert_hook_buttons(builder, hook_commands) + except Exception as e: + logger.warning(f"[RENEWAL_COMPLETE] Ошибка при применении хуков: {e}") + formatted_expiry_date = datetime.fromtimestamp(new_expiry_time / 1000, tz=moscow_tz).strftime("%d %B %Y, %H:%M") formatted_expiry_date = formatted_expiry_date.replace( diff --git a/handlers/keys/key_view.py b/handlers/keys/key_view.py index 6cc52a51..e0d9dc3e 100644 --- a/handlers/keys/key_view.py +++ b/handlers/keys/key_view.py @@ -314,8 +314,6 @@ async def render_key_info(message: Message, session: Any, key_name: str, image_p ) else: builder.row(InlineKeyboardButton(text=CONNECT_DEVICE, callback_data=f"connect_device|{key_name}")) - module_buttons = await run_hooks("view_key_menu", key_name=key_name, session=session) - builder = insert_hook_buttons(builder, module_buttons) if HWID_RESET_BUTTON and hwid_count > 0: builder.row( InlineKeyboardButton( @@ -341,6 +339,9 @@ async def render_key_info(message: Message, session: Any, key_name: str, image_p builder.row(InlineKeyboardButton(text=BACK, callback_data="view_keys")) builder.row(InlineKeyboardButton(text=MAIN_MENU, callback_data="profile")) + + module_buttons = await run_hooks("view_key_menu", key_name=key_name, session=session) + builder = insert_hook_buttons(builder, module_buttons) await edit_or_send_message( target_message=message, diff --git a/web/kassai_payment.py b/web/kassai_payment.py index 974debdb..5f4d5056 100644 --- a/web/kassai_payment.py +++ b/web/kassai_payment.py @@ -63,8 +63,8 @@ async def kassai_payment_webhook(request: web.Request): async with async_session_maker() as session: await update_balance(session, tg_id, amount_float) - await send_payment_success_notification(tg_id, amount_float, session) await add_payment(session, tg_id, amount_float, "kassai") + await send_payment_success_notification(tg_id, amount_float, session) processed_payments.add(intid) if merchant_order_id: diff --git a/web/wata_payment.py b/web/wata_payment.py index 1d52c3d6..17510347 100644 --- a/web/wata_payment.py +++ b/web/wata_payment.py @@ -59,8 +59,8 @@ async def wata_payment_webhook(request: web.Request): return web.Response(status=400) async with async_session_maker() as session: await update_balance(session, int(tg_id), float(amount)) - await send_payment_success_notification(tg_id, float(amount), session) await add_payment(session, int(tg_id), float(amount), "wata") + await send_payment_success_notification(tg_id, float(amount), session) logger.info(f"✅ WATA: баланс пополнен для пользователя {tg_id} на {amount}") elif data.get("transactionStatus") == "Declined": logger.warning(f"WATA: транзакция отклонена: {data}")