From 099be68d298cb925e776c0af4dfe48b2d70149b0 Mon Sep 17 00:00:00 2001 From: Max Shalenkov Date: Wed, 20 Aug 2025 23:11:28 +0400 Subject: [PATCH 1/5] fix hook:view_key_menu --- handlers/keys/key_view.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) 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, From cb8453f415a0a3bdc9cca7ad3778aa81d5700035 Mon Sep 17 00:00:00 2001 From: myr1001 <31289828+myr1001@users.noreply.github.com> Date: Fri, 22 Aug 2025 15:18:42 +0300 Subject: [PATCH 2/5] Update wata_payment.py fix notifications for notifications module --- web/wata_payment.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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}") From 379944200b42b7459d7fa39def44d3073de5ebdf Mon Sep 17 00:00:00 2001 From: myr1001 <31289828+myr1001@users.noreply.github.com> Date: Fri, 22 Aug 2025 15:19:39 +0300 Subject: [PATCH 3/5] Update kassai_payment.py fix notofications for notifications module --- web/kassai_payment.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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: From 4795107178e460e57198fb3e0dbda5c8a04bac54 Mon Sep 17 00:00:00 2001 From: Capybara-z Date: Sat, 23 Aug 2025 14:18:35 +0300 Subject: [PATCH 4/5] fix instructions --- handlers/instructions/instructions.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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( From 9b5ab83b1f5e9af8b2656614ea0885bcfb213f8e Mon Sep 17 00:00:00 2001 From: Capybara-z Date: Sun, 24 Aug 2025 00:13:40 +0300 Subject: [PATCH 5/5] Expanding the work of hooks --- handlers/keys/key_mode/key_cluster_mode.py | 9 +++++++++ handlers/keys/key_mode/key_country_mode.py | 9 +++++++++ handlers/keys/key_renew.py | 7 +++++++ 3 files changed, 25 insertions(+) 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(