feat(/me): subscription data + rw controls
This commit is contained in:
70
external/rw.py
vendored
70
external/rw.py
vendored
@@ -431,6 +431,27 @@ def get_sdk() -> RemnawaveSDK | None:
|
||||
return RemnawaveSDK(base_url=cfg.remnawave_base_url, token=cfg.remnawave_token)
|
||||
|
||||
|
||||
async def get_rw_user(
|
||||
sdk: RemnawaveSDK, telegram_id: int | None = None, username: str | None = None
|
||||
) -> RWUserInfo | None:
|
||||
rw_user = None
|
||||
if telegram_id is not None:
|
||||
rw_user = await get_user_by_telegram_id(sdk, telegram_id)
|
||||
|
||||
if rw_user is None:
|
||||
rw_username = _build_rw_username(telegram_id=telegram_id, username=username)
|
||||
if rw_username is None:
|
||||
logger.warning(
|
||||
"Cannot build username for telegram_id=%s username=%s",
|
||||
telegram_id,
|
||||
username,
|
||||
)
|
||||
return None
|
||||
|
||||
rw_user = await get_user_by_username(sdk, rw_username)
|
||||
return rw_user
|
||||
|
||||
|
||||
async def sync_subscription_by_telegram_id(
|
||||
*,
|
||||
expires_at: datetime,
|
||||
@@ -443,38 +464,29 @@ async def sync_subscription_by_telegram_id(
|
||||
logger.info("Skipping RW subscription sync: RemnaWave is not configured")
|
||||
return False
|
||||
|
||||
rw_user = None
|
||||
if telegram_id is not None:
|
||||
rw_user = await get_user_by_telegram_id(sdk, telegram_id)
|
||||
|
||||
rw_user = await get_rw_user(sdk, telegram_id=telegram_id, username=username)
|
||||
if rw_user is None:
|
||||
rw_username = _build_rw_username(telegram_id=telegram_id, username=username)
|
||||
if rw_username is None:
|
||||
logger.warning(
|
||||
"Skipping RW subscription sync: cannot build username for telegram_id=%s username=%s",
|
||||
telegram_id,
|
||||
username,
|
||||
)
|
||||
return False
|
||||
|
||||
rw_user = await get_user_by_username(sdk, rw_username)
|
||||
if rw_user is None:
|
||||
rw_user = await create_user(
|
||||
sdk=sdk,
|
||||
username=rw_username,
|
||||
telegram_id=telegram_id,
|
||||
expire_at=expires_at,
|
||||
hwid_device_limit=None if devices == 0 else devices,
|
||||
squad_uuids=cfg.remnawave_default_squads,
|
||||
)
|
||||
if rw_user is None:
|
||||
logger.warning(
|
||||
"Failed to create RW user for telegram_id=%s username=%s",
|
||||
telegram_id,
|
||||
username,
|
||||
)
|
||||
return False
|
||||
rw_user = await create_user(
|
||||
sdk=sdk,
|
||||
username=rw_username,
|
||||
telegram_id=telegram_id,
|
||||
expire_at=expires_at,
|
||||
hwid_device_limit=None if devices == 0 else devices,
|
||||
squad_uuids=cfg.remnawave_default_squads,
|
||||
)
|
||||
if rw_user is None:
|
||||
logger.warning(
|
||||
"Failed to create RW user for telegram_id=%s username=%s",
|
||||
telegram_id,
|
||||
username,
|
||||
)
|
||||
return False
|
||||
|
||||
expire_synced = await update_expire_at(sdk, rw_user.uuid, expires_at)
|
||||
devices_synced = await set_hwid_limit(sdk, rw_user.uuid, devices)
|
||||
return expire_synced and devices_synced
|
||||
|
||||
|
||||
def build_subscription_link(short_uuid: str):
|
||||
return cfg.remnawave_sub_url.rstrip("/") + f"/{short_uuid}"
|
||||
|
||||
Reference in New Issue
Block a user