From c19a6afda9c2673cce8d5baa1cc3bff55e445b44 Mon Sep 17 00:00:00 2001 From: Capybara-z Date: Wed, 4 Jun 2025 00:52:22 +0300 Subject: [PATCH] fix remnawave sync logic MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Исправлена логика синхронизации Remnawave, если обновлять нечего пересоздаем. --- handlers/admin/clusters/clusters_handler.py | 35 ++++++++++++++++++--- 1 file changed, 30 insertions(+), 5 deletions(-) diff --git a/handlers/admin/clusters/clusters_handler.py b/handlers/admin/clusters/clusters_handler.py index 20f0cecf..86c200c3 100644 --- a/handlers/admin/clusters/clusters_handler.py +++ b/handlers/admin/clusters/clusters_handler.py @@ -611,9 +611,9 @@ async def handle_sync_cluster( traffic_limit_bytes = int(tariff.traffic_limit * 1024**3) hwid_limit = tariff.device_limit else: - logger.warning(f"[Sync] Ключ {key['client_id']} с несуществующим тарифом ID={key['tariff_id']} — обновим без лимитов") - - valid_email = f"{key['email']}@fake.local" + logger.warning( + f"[Sync] Ключ {key['client_id']} с несуществующим тарифом ID={key['tariff_id']} — обновим без лимитов" + ) inbound_ids = [ s["inbound_id"] @@ -621,16 +621,41 @@ async def handle_sync_cluster( if s.get("inbound_id") ] - await remna.update_user( + success = await remna.update_user( uuid=key["client_id"], expire_at=expire_iso, telegram_id=key["tg_id"], - email=valid_email, + email=f"{key['email']}@fake.local", active_user_inbounds=inbound_ids, traffic_limit_bytes=traffic_limit_bytes, hwid_device_limit=hwid_limit, ) + if not success: + logger.warning(f"[Sync] ошибка обновления, пробуем пересоздать") + + await delete_key_from_cluster( + cluster_name, key["email"], key["client_id"], session + ) + + await session.execute( + delete(Key).where( + Key.tg_id == key["tg_id"], + Key.client_id == key["client_id"] + ) + ) + + await create_key_on_cluster( + cluster_name, + key["tg_id"], + key["client_id"], + key["email"], + key["expiry_time"], + plan=key["tariff_id"], + session=session, + remnawave_link=key["remnawave_link"], + ) + else: await delete_key_from_cluster( cluster_name, key["email"], key["client_id"], session