fix: check trial key already used

This commit is contained in:
hteppl
2025-01-04 15:30:34 +03:00
parent bab6a807f3
commit afc913a2ff
+18 -4
View File
@@ -3,16 +3,30 @@ import uuid
from datetime import datetime, timedelta from datetime import datetime, timedelta
from typing import Any from typing import Any
from config import ADMIN_PASSWORD, ADMIN_USERNAME, PUBLIC_LINK, TOTAL_GB, TRIAL_TIME
from handlers.texts import INSTRUCTIONS
from py3xui import AsyncApi from py3xui import AsyncApi
from client import add_client from client import add_client
from config import ADMIN_PASSWORD, ADMIN_USERNAME, PUBLIC_LINK, TOTAL_GB, TRIAL_TIME
from database import get_servers_from_db, store_key, use_trial from database import get_servers_from_db, store_key, use_trial
from handlers.texts import INSTRUCTIONS
from handlers.utils import generate_random_email, get_least_loaded_cluster from handlers.utils import generate_random_email, get_least_loaded_cluster
from logger import logger
async def create_trial_key(tg_id: int, session: Any): async def create_trial_key(tg_id: int, session: Any):
try:
# Проверка статуса триала
trial_status = await session.fetchval(
'SELECT trial FROM connections WHERE tg_id = $1',
tg_id
)
if trial_status == 1:
return {'error': 'Вы уже использовали пробную версию.'}
except Exception as e:
logger.error(f"Ошибка при при проверке триала: {e}")
client_id = str(uuid.uuid4()) client_id = str(uuid.uuid4())
email = generate_random_email() email = generate_random_email()
public_link = f"{PUBLIC_LINK}{email}/{tg_id}" public_link = f"{PUBLIC_LINK}{email}/{tg_id}"
@@ -23,14 +37,12 @@ async def create_trial_key(tg_id: int, session: Any):
expiry_timestamp = int(expiry_time.timestamp() * 1000) expiry_timestamp = int(expiry_time.timestamp() * 1000)
clusters = await get_servers_from_db() clusters = await get_servers_from_db()
least_loaded_cluster = await get_least_loaded_cluster() least_loaded_cluster = await get_least_loaded_cluster()
if least_loaded_cluster not in clusters: if least_loaded_cluster not in clusters:
raise ValueError(f"Кластер {least_loaded_cluster} не найден в базе данных.") raise ValueError(f"Кластер {least_loaded_cluster} не найден в базе данных.")
servers_in_cluster = clusters[least_loaded_cluster] servers_in_cluster = clusters[least_loaded_cluster]
tasks = [] tasks = []
for server_info in servers_in_cluster: for server_info in servers_in_cluster:
@@ -64,5 +76,7 @@ async def create_trial_key(tg_id: int, session: Any):
server_id=least_loaded_cluster, server_id=least_loaded_cluster,
session=session, session=session,
) )
await use_trial(tg_id, session) await use_trial(tg_id, session)
return result return result