From 33e44abef0da419a989b8ef6d9999914f4a40386 Mon Sep 17 00:00:00 2001 From: Capybara-z Date: Mon, 30 Jun 2025 21:48:14 +0300 Subject: [PATCH] fix: server deletion when disabled / fix: multiple gifts receiving / add: tariff group info in subscription --- handlers/admin/servers/servers_handler.py | 2 +- handlers/keys/key_mode/key_cluster_mode.py | 4 +++- handlers/keys/key_mode/key_country_mode.py | 4 +++- handlers/keys/key_renew.py | 3 ++- handlers/keys/key_view.py | 5 +++- .../notifications/general_notifications.py | 6 +++-- handlers/start.py | 23 +++++++++++++++---- 7 files changed, 35 insertions(+), 12 deletions(-) diff --git a/handlers/admin/servers/servers_handler.py b/handlers/admin/servers/servers_handler.py index 47b1cb7c..382154ed 100644 --- a/handlers/admin/servers/servers_handler.py +++ b/handlers/admin/servers/servers_handler.py @@ -115,7 +115,7 @@ async def process_callback_delete_server( server_name = callback_data.data - servers_dict = await get_servers(session) + servers_dict = await get_servers(session, include_enabled=True) cluster_name = None for c_name, server_list in servers_dict.items(): if any(s["server_name"] == server_name for s in server_list): diff --git a/handlers/keys/key_mode/key_cluster_mode.py b/handlers/keys/key_mode/key_cluster_mode.py index 1ce962f1..9ad80558 100644 --- a/handlers/keys/key_mode/key_cluster_mode.py +++ b/handlers/keys/key_mode/key_cluster_mode.py @@ -198,12 +198,14 @@ async def key_cluster_mode( ) else: tariff_duration = tariff_info["name"] + subgroup_title = tariff_info.get("subgroup_title", "") if tariff_info else "" key_message_text = key_message_success( final_link, tariff_name=tariff_duration, traffic_limit=tariff_info.get("traffic_limit", 0) if tariff_info else 0, - device_limit=tariff_info.get("device_limit", 0) if tariff_info else 0 + device_limit=tariff_info.get("device_limit", 0) if tariff_info else 0, + subgroup_title=subgroup_title ) default_media_path = "img/pic.jpg" diff --git a/handlers/keys/key_mode/key_country_mode.py b/handlers/keys/key_mode/key_country_mode.py index b8a92953..969dae29 100644 --- a/handlers/keys/key_mode/key_country_mode.py +++ b/handlers/keys/key_mode/key_country_mode.py @@ -570,12 +570,14 @@ async def finalize_key_creation( ) else: tariff_duration = tariff_info["name"] if tariff_info else None + subgroup_title = tariff_info.get("subgroup_title", "") if tariff_info else "" key_message_text = key_message_success( link_to_show, tariff_name=tariff_duration, traffic_limit=tariff_info.get("traffic_limit", 0) if tariff_info else 0, - device_limit=tariff_info.get("device_limit", 0) if tariff_info else 0 + device_limit=tariff_info.get("device_limit", 0) if tariff_info else 0, + subgroup_title=subgroup_title ) await edit_or_send_message( diff --git a/handlers/keys/key_renew.py b/handlers/keys/key_renew.py index 5e0c10fe..6386fde6 100644 --- a/handlers/keys/key_renew.py +++ b/handlers/keys/key_renew.py @@ -401,7 +401,8 @@ async def complete_key_renewal( tariff_name=tariff["name"], traffic_limit=tariff.get("traffic_limit") if tariff.get("traffic_limit") is not None else 0, device_limit=tariff.get("device_limit") if tariff.get("device_limit") is not None else 0, - expiry_date=formatted_expiry_date + expiry_date=formatted_expiry_date, + subgroup_title=tariff.get("subgroup_title", "") ) if callback_query: diff --git a/handlers/keys/key_view.py b/handlers/keys/key_view.py index 44c7dc14..3d8b8df5 100644 --- a/handlers/keys/key_view.py +++ b/handlers/keys/key_view.py @@ -285,6 +285,7 @@ async def render_key_info( tariff_name = "" traffic_limit = 0 device_limit = 0 + subgroup_title = "" tariff = None if record.get("tariff_id"): tariff = await get_tariff_by_id(session, record["tariff_id"]) @@ -292,6 +293,7 @@ async def render_key_info( tariff_name = tariff["name"] traffic_limit = tariff.get("traffic_limit", 0) device_limit = tariff.get("device_limit", 0) + subgroup_title = tariff.get("subgroup_title", "") tariff_duration = tariff_name @@ -304,7 +306,8 @@ async def render_key_info( hwid_count=hwid_count if device_limit is not None else 0, tariff_name=tariff_duration, traffic_limit=traffic_limit, - device_limit=device_limit + device_limit=device_limit, + subgroup_title=subgroup_title ) if ENABLE_UPDATE_SUBSCRIPTION_BUTTON: diff --git a/handlers/notifications/general_notifications.py b/handlers/notifications/general_notifications.py index cf8aad12..643ac368 100644 --- a/handlers/notifications/general_notifications.py +++ b/handlers/notifications/general_notifications.py @@ -403,7 +403,8 @@ async def handle_expired_keys( get_renewal_message( tariff_name=tariff.get("name", ""), traffic_limit=tariff.get("traffic_limit") if tariff.get("traffic_limit") is not None else 0, - device_limit=tariff.get("device_limit") if tariff.get("device_limit") is not None else 0 + device_limit=tariff.get("device_limit") if tariff.get("device_limit") is not None else 0, + subgroup_title=tariff.get("subgroup_title", "") ), ) continue @@ -624,7 +625,8 @@ async def process_auto_renew_or_notify( tariff_name=selected_tariff["name"], traffic_limit=selected_tariff.get("traffic_limit") if selected_tariff.get("traffic_limit") is not None else 0, device_limit=selected_tariff.get("device_limit") if selected_tariff.get("device_limit") is not None else 0, - expiry_date=formatted_expiry_date + expiry_date=formatted_expiry_date, + subgroup_title=selected_tariff.get("subgroup_title", "") ) keyboard = build_notification_expired_kb() diff --git a/handlers/start.py b/handlers/start.py index 3bfaba1d..b094208e 100644 --- a/handlers/start.py +++ b/handlers/start.py @@ -58,6 +58,8 @@ from .utils import edit_or_send_message router = Router() +processing_gifts = set() + @router.callback_query(F.data == "start") async def handle_start_callback_query( @@ -208,11 +210,22 @@ async def process_start_logic( gift_id = parts[0] sender_id = parts[1] - logger.info(f"[GIFT] Обнаружен подарок {gift_id} от {sender_id}") - await handle_gift_link( - gift_id, message, state, session, user_data=user_data - ) - gift_detected = True + + if gift_id in processing_gifts: + await message.answer("⏳ Подарок уже обрабатывается, подождите...") + return await process_callback_view_profile(message, state, admin, session) + + processing_gifts.add(gift_id) + + try: + logger.info(f"[GIFT] Обнаружен подарок {gift_id} от {sender_id}") + await handle_gift_link( + gift_id, message, state, session, user_data=user_data + ) + gift_detected = True + finally: + processing_gifts.discard(gift_id) + break if "referral" in part: