From 91e79388d190c125a24b134745f0ced4b6cdafad Mon Sep 17 00:00:00 2001 From: 3252a8 <3252a8@proton.me> Date: Sun, 17 May 2026 17:26:37 +0300 Subject: [PATCH] fix: hide device topup button when no HWID packages or unlimited devices --- backend/bot/app/web/webapp/serializers.py | 8 ++++++++ backend/bot/handlers/user/subscription/core.py | 11 ++++++++++- frontend/src/webapp/screens/DevicesScreen.svelte | 2 +- 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/backend/bot/app/web/webapp/serializers.py b/backend/bot/app/web/webapp/serializers.py index 9ae8300..bc0c158 100644 --- a/backend/bot/app/web/webapp/serializers.py +++ b/backend/bot/app/web/webapp/serializers.py @@ -193,6 +193,7 @@ def _serialize_subscription( can_topup_regular_traffic = False can_topup_premium_traffic = False can_topup_traffic = False + can_topup_devices = False if settings.tariffs_config and active.get("tariff_key"): try: tariff = settings.tariffs_config.require(str(active.get("tariff_key"))) @@ -204,10 +205,16 @@ def _serialize_subscription( and tariff.premium_topup_packages.has_any() ) can_topup_traffic = bool(can_topup_regular_traffic or can_topup_premium_traffic) + # max_devices == 0 means unlimited — top-up is pointless in that case. + can_topup_devices = bool( + tariff.has_hwid_device_packages() + and _coerce_int_or_none(active.get("max_devices")) != 0 + ) except Exception: can_topup_regular_traffic = False can_topup_premium_traffic = False can_topup_traffic = False + can_topup_devices = False return { "active": seconds_left > 0, @@ -249,6 +256,7 @@ def _serialize_subscription( "can_topup_traffic": can_topup_traffic, "can_topup_regular_traffic": can_topup_regular_traffic, "can_topup_premium_traffic": can_topup_premium_traffic, + "can_topup_devices": can_topup_devices, "period_start_at": active.get("period_start_at").isoformat() if active.get("period_start_at") else None, diff --git a/backend/bot/handlers/user/subscription/core.py b/backend/bot/handlers/user/subscription/core.py index cb53d4a..c50e9b1 100644 --- a/backend/bot/handlers/user/subscription/core.py +++ b/backend/bot/handlers/user/subscription/core.py @@ -994,7 +994,16 @@ async def my_subscription_command_handler( ) ] ) - if settings.tariffs_config and local_sub and local_sub.tariff_key: + # Skip the buy-devices button entirely when the user has unlimited + # devices (max_devices == 0). Otherwise the button leads to an + # alert "hwid_devices_unlimited_no_topup" — confusing dead end. + devices_topup_allowed = ( + settings.tariffs_config + and local_sub + and local_sub.tariff_key + and max_devices_value not in (None, 0) + ) + if devices_topup_allowed: try: tariff_for_devices = settings.tariffs_config.require(local_sub.tariff_key) if ( diff --git a/frontend/src/webapp/screens/DevicesScreen.svelte b/frontend/src/webapp/screens/DevicesScreen.svelte index 63f9774..c411e7e 100644 --- a/frontend/src/webapp/screens/DevicesScreen.svelte +++ b/frontend/src/webapp/screens/DevicesScreen.svelte @@ -46,7 +46,7 @@ value={devicesPercent(devicesData)} label={t("wa_devices_title")} /> - {#if subscription?.active && subscription?.max_devices !== 0} + {#if subscription?.active && subscription?.max_devices !== 0 && subscription?.can_topup_devices}