Попытка добавления проходок, аккаунтов, а так же доработка прокси
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
import json
|
||||
from pathlib import Path
|
||||
from datetime import datetime
|
||||
import structlog
|
||||
|
||||
logger = structlog.get_logger(__name__)
|
||||
|
||||
PASSES_FILE = Path("data/passes.json")
|
||||
|
||||
def load_passes():
|
||||
if not PASSES_FILE.exists():
|
||||
PASSES_FILE.parent.mkdir(exist_ok=True)
|
||||
default = {"passes": {}}
|
||||
PASSES_FILE.write_text(json.dumps(default, indent=2, ensure_ascii=False))
|
||||
return default
|
||||
try:
|
||||
return json.loads(PASSES_FILE.read_text(encoding="utf-8"))
|
||||
except:
|
||||
return {"passes": {}}
|
||||
|
||||
def save_passes(data):
|
||||
PASSES_FILE.write_text(json.dumps(data, indent=2, ensure_ascii=False))
|
||||
|
||||
def activate_pass(pass_code: str, username: str, user_id: int) -> dict:
|
||||
data = load_passes()
|
||||
pass_code = pass_code.upper().strip()
|
||||
|
||||
if pass_code not in data["passes"]:
|
||||
return {"success": False, "error": "Проходка не найдена"}
|
||||
|
||||
p = data["passes"][pass_code]
|
||||
|
||||
if not p.get("is_active", True):
|
||||
return {"success": False, "error": "Проходка деактивирована"}
|
||||
|
||||
if p.get("expires_at") and p.get("expires_at") < datetime.now().timestamp():
|
||||
return {"success": False, "error": "Проходка истекла"}
|
||||
|
||||
if p.get("owner") is not None:
|
||||
if p.get("owner") != username:
|
||||
return {"success": False, "error": "Проходка уже активирована другим пользователем"}
|
||||
return {"success": True, "message": "Проходка уже активирована на вашем аккаунте"}
|
||||
|
||||
# Активация
|
||||
now = datetime.now().timestamp()
|
||||
p["owner"] = username
|
||||
p["activated_at"] = now
|
||||
p["uses"] = p.get("uses", 0) + 1
|
||||
|
||||
save_passes(data)
|
||||
|
||||
logger.info("Pass activated", pass_code=pass_code, username=username)
|
||||
return {"success": True, "message": "Проходка успешно активирована!"}
|
||||
|
||||
def has_active_pass(username: str) -> bool:
|
||||
data = load_passes()
|
||||
for p in data["passes"].values():
|
||||
if p.get("owner") == username:
|
||||
if p.get("expires_at") and p.get("expires_at") < datetime.now().timestamp():
|
||||
continue
|
||||
if p.get("is_active", True):
|
||||
return True
|
||||
return False
|
||||
|
||||
def get_user_passes(username: str) -> list:
|
||||
data = load_passes()
|
||||
result = []
|
||||
now = datetime.now().timestamp()
|
||||
for p in data["passes"].values():
|
||||
if p.get("owner") == username:
|
||||
result.append({
|
||||
"code": p["code"],
|
||||
"activated_at": p.get("activated_at"),
|
||||
"expires_at": p.get("expires_at"),
|
||||
"is_active": p.get("is_active", True) and (not p.get("expires_at") or p.get("expires_at") > now)
|
||||
})
|
||||
return result
|
||||
Reference in New Issue
Block a user