From 6fd335d71caec5f26c7e2c07a2ce6784d2e03f28 Mon Sep 17 00:00:00 2001 From: Capybara-z Date: Sat, 18 Apr 2026 01:36:37 +0000 Subject: [PATCH] Fix init_db duplicate / circular import / redundant panel query / InaccessibleMessage --- core/tasks/periodic_manager.py | 3 +-- middlewares/subscription.py | 2 +- services/operations/aggregated_links.py | 3 +-- services/tariffs/tariff_display.py | 31 +------------------------ 4 files changed, 4 insertions(+), 35 deletions(-) diff --git a/core/tasks/periodic_manager.py b/core/tasks/periodic_manager.py index cb797d12..543dd3e3 100644 --- a/core/tasks/periodic_manager.py +++ b/core/tasks/periodic_manager.py @@ -75,14 +75,13 @@ def _run_process_loop_task(task_id: str, runner: LoopRunner) -> None: async def _run_process_loop_task_async(task_id: str, runner: LoopRunner) -> None: from config import API_TOKEN from core.bootstrap import bootstrap - from database import async_session_maker, init_db + from database import async_session_maker from database.db import reset_async_db_engine bot = Bot(token=API_TOKEN, default=DefaultBotProperties(parse_mode=ParseMode.HTML)) logger.info("[PeriodicManager] Process-loop задача {} запущена, PID={}", task_id, os.getpid()) try: reset_async_db_engine() - await init_db() await bootstrap() await runner(bot, async_session_maker) except Exception as error: diff --git a/middlewares/subscription.py b/middlewares/subscription.py index 86545189..421c3ea3 100644 --- a/middlewares/subscription.py +++ b/middlewares/subscription.py @@ -79,7 +79,7 @@ class SubscriptionMiddleware(BaseMiddleware): if "original_text" in state_data and "user_data" in state_data: return - original_text = message.text or message.caption + original_text = getattr(message, "text", None) or getattr(message, "caption", None) user_data = { "tg_id": from_user.id, "username": from_user.username, diff --git a/services/operations/aggregated_links.py b/services/operations/aggregated_links.py index 59d04ccd..5d57c2dc 100644 --- a/services/operations/aggregated_links.py +++ b/services/operations/aggregated_links.py @@ -8,8 +8,6 @@ from database import filter_cluster_by_subgroup, get_key_details, get_tariff_by_ from logger import logger from panels._3xui import get_vless_link_for_client, get_xui_instance from panels.remnawave_runtime import with_remnawave_api -from servers import extract_host - from .utils import is_plan_vless, split_by_panel @@ -82,6 +80,7 @@ async def _try_build_3xui_vless(servers: list, email: str) -> str | None: if not inbound: return None port = getattr(inbound, "port", None) + from servers import extract_host host = extract_host(si.get("subscription_url") or si.get("api_url")) return await get_vless_link_for_client( xui=xui, diff --git a/services/tariffs/tariff_display.py b/services/tariffs/tariff_display.py index 294b114d..628a1a8d 100644 --- a/services/tariffs/tariff_display.py +++ b/services/tariffs/tariff_display.py @@ -7,7 +7,6 @@ from database import get_tariff_by_id from database.models import Key from handlers.texts import key_message_success from logger import logger -from panels.remnawave_runtime import get_remnawave_profile GB = 1024 * 1024 * 1024 @@ -145,7 +144,7 @@ async def get_key_tariff_display( selected_device_limit_override: int | None = None, selected_traffic_gb_override: int | None = None, ) -> tuple[str, str, int, int, bool]: - """Возвращает отображение тарифа и эффективные лимиты, приоритет — данные панели.""" + """Возвращает отображение тарифа и эффективные лимиты из БД.""" tariff_id = key_record.get("tariff_id") if not tariff_id: return "", "", 0, 0, False, None @@ -178,34 +177,6 @@ async def get_key_tariff_display( tariff=tariff, ) - server_cluster_id = key_record.get("server_id") - client_id = key_record.get("client_id") - - if server_cluster_id and client_id: - try: - profile = await get_remnawave_profile(session, str(server_cluster_id), client_id, fallback_any=True) - if profile: - panel_traffic_limit_bytes = profile.get("traffic_limit_bytes") - panel_device_limit = profile.get("hwid_device_limit") - - if panel_traffic_limit_bytes is not None: - try: - traffic_limit_bytes = int(panel_traffic_limit_bytes) - except (TypeError, ValueError): - logger.warning( - f"[KeyTariffDisplay] Invalid trafficLimitBytes from Remnawave for {client_id}: {panel_traffic_limit_bytes}" - ) - - if panel_device_limit is not None: - try: - device_limit = int(panel_device_limit) - except (TypeError, ValueError): - logger.warning( - f"[KeyTariffDisplay] Invalid hwidDeviceLimit from Remnawave for {client_id}: {panel_device_limit}" - ) - except Exception as e: - logger.warning(f"[KeyTariffDisplay] Error while overriding limits from panel: {e}") - traffic_limit_gb = int(traffic_limit_bytes / GB) if traffic_limit_bytes else 0 if tariff: