Update project configuration and codebase
This commit is contained in:
@@ -1,7 +1,6 @@
|
||||
import logging
|
||||
from dataclasses import dataclass
|
||||
from datetime import datetime, timedelta, timezone
|
||||
from typing import Optional
|
||||
from datetime import UTC, datetime, timedelta
|
||||
from uuid import UUID
|
||||
|
||||
from remnawave import RemnawaveSDK
|
||||
@@ -23,9 +22,9 @@ class RWUserInfo:
|
||||
expire_at: datetime
|
||||
used_traffic_bytes: float
|
||||
traffic_limit_bytes: int # 0 = unlimited
|
||||
hwid_device_limit: Optional[int] # None = unlimited
|
||||
hwid_device_limit: int | None # None = unlimited
|
||||
active_squads: list[dict] # [{"uuid": "...", "name": "..."}]
|
||||
description: Optional[str]
|
||||
description: str | None
|
||||
short_uuid: str
|
||||
|
||||
|
||||
@@ -74,7 +73,7 @@ def _parse_user(user_dto) -> RWUserInfo:
|
||||
async def get_user_by_telegram_id(
|
||||
sdk: RemnawaveSDK,
|
||||
telegram_id: int,
|
||||
) -> Optional[RWUserInfo]:
|
||||
) -> RWUserInfo | None:
|
||||
"""
|
||||
Получить первого пользователя Remnawave, привязанного к Telegram ID.
|
||||
Возвращает None, если пользователь не найден или Remnawave недоступен.
|
||||
@@ -115,7 +114,7 @@ async def add_days(
|
||||
sdk: RemnawaveSDK,
|
||||
user_uuid: str,
|
||||
days: int,
|
||||
) -> Optional[datetime]:
|
||||
) -> datetime | None:
|
||||
"""
|
||||
Добавить N дней к expire_at пользователя.
|
||||
Возвращает новую дату окончания или None при ошибке.
|
||||
@@ -131,7 +130,7 @@ async def add_days(
|
||||
# Обеспечиваем timezone-aware datetime
|
||||
current_expire = user_dto.expire_at
|
||||
if current_expire.tzinfo is None:
|
||||
current_expire = current_expire.replace(tzinfo=timezone.utc)
|
||||
current_expire = current_expire.replace(tzinfo=UTC)
|
||||
|
||||
new_expire = current_expire + timedelta(days=days)
|
||||
|
||||
@@ -146,7 +145,7 @@ async def add_days(
|
||||
|
||||
new_dt = result.expire_at
|
||||
if new_dt is not None and new_dt.tzinfo is None:
|
||||
new_dt = new_dt.replace(tzinfo=timezone.utc)
|
||||
new_dt = new_dt.replace(tzinfo=UTC)
|
||||
return new_dt
|
||||
except Exception as exc:
|
||||
logger.warning("Failed to add %d days for user %s: %s", days, user_uuid, exc)
|
||||
@@ -157,7 +156,7 @@ async def remove_days(
|
||||
sdk: RemnawaveSDK,
|
||||
user_uuid: str,
|
||||
days: int,
|
||||
) -> Optional[datetime]:
|
||||
) -> datetime | None:
|
||||
"""
|
||||
Вычесть N дней из expire_at пользователя.
|
||||
Возвращает новую дату окончания или None при ошибке.
|
||||
@@ -170,7 +169,7 @@ async def remove_days(
|
||||
|
||||
current_expire = user_dto.expire_at
|
||||
if current_expire.tzinfo is None:
|
||||
current_expire = current_expire.replace(tzinfo=timezone.utc)
|
||||
current_expire = current_expire.replace(tzinfo=UTC)
|
||||
|
||||
new_expire = current_expire - timedelta(days=days)
|
||||
|
||||
@@ -185,7 +184,7 @@ async def remove_days(
|
||||
|
||||
new_dt = result.expire_at
|
||||
if new_dt is not None and new_dt.tzinfo is None:
|
||||
new_dt = new_dt.replace(tzinfo=timezone.utc)
|
||||
new_dt = new_dt.replace(tzinfo=UTC)
|
||||
return new_dt
|
||||
except Exception as exc:
|
||||
logger.warning("Failed to remove %d days for user %s: %s", days, user_uuid, exc)
|
||||
@@ -203,7 +202,7 @@ async def set_hwid_limit(
|
||||
Возвращает True при успехе, False при ошибке.
|
||||
"""
|
||||
try:
|
||||
hwid_value: Optional[int] = None if limit == 0 else limit
|
||||
hwid_value: int | None = None if limit == 0 else limit
|
||||
await sdk.users.update_user(
|
||||
UpdateUserRequestDto(
|
||||
uuid=UUID(user_uuid),
|
||||
|
||||
Reference in New Issue
Block a user