mirror of
https://github.com/BEDOLAGA-DEV/remnawave-bedolaga-telegram-bot.git
synced 2026-02-27 23:00:53 +00:00
Add configurable trial rollover for paid subscriptions
This commit is contained in:
@@ -66,6 +66,7 @@ class Settings(BaseSettings):
|
||||
TRIAL_DURATION_DAYS: int = 3
|
||||
TRIAL_TRAFFIC_LIMIT_GB: int = 10
|
||||
TRIAL_DEVICE_LIMIT: int = 2
|
||||
TRIAL_ADD_REMAINING_DAYS_TO_PAID: bool = False
|
||||
DEFAULT_TRAFFIC_LIMIT_GB: int = 100
|
||||
DEFAULT_DEVICE_LIMIT: int = 1
|
||||
TRIAL_SQUAD_UUID: str = ""
|
||||
|
||||
@@ -2877,16 +2877,31 @@ async def admin_buy_subscription_execute(
|
||||
|
||||
if subscription:
|
||||
current_time = datetime.utcnow()
|
||||
|
||||
bonus_period = timedelta()
|
||||
|
||||
if (
|
||||
subscription.is_trial
|
||||
and settings.TRIAL_ADD_REMAINING_DAYS_TO_PAID
|
||||
and subscription.end_date
|
||||
):
|
||||
remaining_trial_delta = subscription.end_date - current_time
|
||||
if remaining_trial_delta.total_seconds() > 0:
|
||||
bonus_period = remaining_trial_delta
|
||||
logger.info(
|
||||
"Админ продлевает подписку: добавляем оставшееся время триала (%s) пользователю %s",
|
||||
bonus_period,
|
||||
target_user.telegram_id,
|
||||
)
|
||||
|
||||
if subscription.end_date <= current_time:
|
||||
subscription.start_date = current_time
|
||||
|
||||
subscription.end_date = current_time + timedelta(days=period_days)
|
||||
|
||||
subscription.end_date = current_time + timedelta(days=period_days) + bonus_period
|
||||
subscription.status = SubscriptionStatus.ACTIVE.value
|
||||
subscription.updated_at = current_time
|
||||
|
||||
|
||||
if subscription.is_trial or not subscription.is_active:
|
||||
subscription.is_trial = False
|
||||
subscription.is_trial = False
|
||||
if subscription.traffic_limit_gb != 0:
|
||||
subscription.traffic_limit_gb = 0
|
||||
subscription.device_limit = settings.DEFAULT_DEVICE_LIMIT
|
||||
|
||||
@@ -3433,16 +3433,29 @@ async def confirm_purchase(
|
||||
|
||||
existing_subscription = db_user.subscription
|
||||
was_trial_conversion = False
|
||||
|
||||
current_time = datetime.utcnow()
|
||||
|
||||
if existing_subscription:
|
||||
logger.info(f"Обновляем существующую подписку пользователя {db_user.telegram_id}")
|
||||
|
||||
|
||||
bonus_period = timedelta()
|
||||
|
||||
if existing_subscription.is_trial:
|
||||
logger.info(f"Конверсия из триала в платную для пользователя {db_user.telegram_id}")
|
||||
was_trial_conversion = True
|
||||
|
||||
trial_duration = (datetime.utcnow() - existing_subscription.start_date).days
|
||||
|
||||
|
||||
trial_duration = (current_time - existing_subscription.start_date).days
|
||||
|
||||
if settings.TRIAL_ADD_REMAINING_DAYS_TO_PAID and existing_subscription.end_date:
|
||||
remaining_trial_delta = existing_subscription.end_date - current_time
|
||||
if remaining_trial_delta.total_seconds() > 0:
|
||||
bonus_period = remaining_trial_delta
|
||||
logger.info(
|
||||
"Добавляем оставшееся время триала (%s) к новой подписке пользователя %s",
|
||||
bonus_period,
|
||||
db_user.telegram_id,
|
||||
)
|
||||
|
||||
try:
|
||||
from app.database.crud.subscription_conversion import create_subscription_conversion
|
||||
await create_subscription_conversion(
|
||||
@@ -3462,13 +3475,13 @@ async def confirm_purchase(
|
||||
existing_subscription.traffic_limit_gb = final_traffic_gb
|
||||
existing_subscription.device_limit = data['devices']
|
||||
existing_subscription.connected_squads = data['countries']
|
||||
|
||||
existing_subscription.start_date = datetime.utcnow()
|
||||
existing_subscription.end_date = datetime.utcnow() + timedelta(days=data['period_days'])
|
||||
existing_subscription.updated_at = datetime.utcnow()
|
||||
|
||||
|
||||
existing_subscription.start_date = current_time
|
||||
existing_subscription.end_date = current_time + timedelta(days=data['period_days']) + bonus_period
|
||||
existing_subscription.updated_at = current_time
|
||||
|
||||
existing_subscription.traffic_used_gb = 0.0
|
||||
|
||||
|
||||
await db.commit()
|
||||
await db.refresh(existing_subscription)
|
||||
subscription = existing_subscription
|
||||
|
||||
Reference in New Issue
Block a user