| | import asyncio |
| | import json |
| | import secrets |
| | import uuid |
| | from datetime import datetime |
| | from pathlib import Path |
| |
|
| | from argon2 import PasswordHasher |
| | from fastapi import FastAPI, Form, HTTPException, WebSocket, WebSocketDisconnect |
| | from fastapi.middleware.cors import CORSMiddleware |
| | from fastapi.responses import JSONResponse |
| |
|
| | |
| | USERS_FILE = Path("users.json") |
| | GLARES_FILE = Path("glares.json") |
| | GLARE_CAP = 1000 |
| | BASE_RATE = 1 |
| | TIME_FORMAT = "%Y-%m-%dT%H:%M:%S" |
| |
|
| | |
| | app = FastAPI() |
| | ph = PasswordHasher() |
| |
|
| | app.add_middleware( |
| | CORSMiddleware, allow_origins=["*"], allow_methods=["*"], allow_headers=["*"] |
| | ) |
| |
|
| |
|
| | |
| |
|
| |
|
| | def secure_crash_point(): |
| | r = secrets.randbelow(10**6) / 10**6 |
| | if r == 1.0: |
| | r = 0.999999 |
| | return round(max(1.0, 1.0 / (0.99 * (1.0 - r))), 2) |
| |
|
| |
|
| | def secure_uniform(a, b): |
| | |
| | scale = secrets.randbelow(10**6) / 10**6 |
| | return a + (b - a) * scale |
| |
|
| |
|
| | def weighted_choice(elements, probabilities): |
| | |
| | total = sum(probabilities) |
| | if not abs(total - 1.0) < 1e-8: |
| | raise ValueError("Probabilities must sum to 1.") |
| |
|
| | |
| | cumulative = [] |
| | cumsum = 0.0 |
| | for p in probabilities: |
| | cumsum += p |
| | cumulative.append(cumsum) |
| |
|
| | |
| | r = secrets.randbelow(10**8) / 10**8 |
| |
|
| | |
| | for i, cp in enumerate(cumulative): |
| | if r < cp: |
| | return elements[i] |
| | return elements[-1] |
| |
|
| |
|
| | |
| | elements = ["apple", "banana", "cherry"] |
| | probabilities = [0.2, 0.5, 0.3] |
| | result = weighted_choice(elements, probabilities) |
| | print(result) |
| |
|
| |
|
| | |
| |
|
| |
|
| | def load_json(path: Path): |
| | if not path.exists(): |
| | return {} |
| | with open(path, "r") as f: |
| | return json.load(f) |
| |
|
| |
|
| | def save_json(path: Path, data): |
| | with open(path, "w") as f: |
| | json.dump(data, f, indent=2) |
| |
|
| |
|
| | |
| |
|
| |
|
| | def register_user(username: str, password: str): |
| | users = load_json(USERS_FILE) |
| | if username in users: |
| | raise HTTPException(status_code=400, detail="User already exists") |
| | hashed = ph.hash(password) |
| | user_id = str(uuid.uuid4()) |
| | token = secrets.token_hex(32) |
| | users[username] = { |
| | "userId": user_id, |
| | "password": hashed, |
| | "token": token, |
| | } |
| | save_json(USERS_FILE, users) |
| | return token |
| |
|
| |
|
| | def verify_token(token: str): |
| | users = load_json(USERS_FILE) |
| | for username, user in users.items(): |
| | if user.get("token") == token: |
| | return username |
| | return None |
| |
|
| |
|
| | def verify_user_password(username: str, password: str): |
| | users = load_json(USERS_FILE) |
| | if username not in users: |
| | return False |
| | try: |
| | ph.verify(users[username]["password"], password) |
| | return True |
| | except Exception as e: |
| | print(f"Verification error: {e}") |
| | return False |
| |
|
| |
|
| | def get_user_token(username: str): |
| | users = load_json(USERS_FILE) |
| | user = users.get(username) |
| | if user: |
| | return user.get("token") |
| | return None |
| |
|
| |
|
| | |
| |
|
| |
|
| | def get_updated_glares(username: str): |
| | glares = load_json(GLARES_FILE) |
| | now = datetime.utcnow() |
| |
|
| | if username not in glares: |
| | glares[username] = [0, now.strftime(TIME_FORMAT)] |
| | save_json(GLARES_FILE, glares) |
| | return 0 |
| |
|
| | current, last_time = glares[username] |
| | last = datetime.strptime(last_time, TIME_FORMAT) |
| | delta = (now - last).total_seconds() |
| |
|
| | if current >= GLARE_CAP: |
| | return current |
| |
|
| | earn_rate = BASE_RATE * (1 - current / GLARE_CAP) |
| | earned = delta * earn_rate |
| | new_total = min(current + earned, GLARE_CAP) |
| |
|
| | glares[username] = [int(new_total), now.strftime(TIME_FORMAT)] |
| | save_json(GLARES_FILE, glares) |
| | return new_total |
| |
|
| |
|
| | def update_user_glares(username: str, earnings: float): |
| | glares = load_json(GLARES_FILE) |
| | now = datetime.utcnow().strftime(TIME_FORMAT) |
| | glares[username] = [glares[username][0] + earnings, now] |
| | save_json(GLARES_FILE, glares) |
| |
|
| |
|
| | |
| |
|
| |
|
| | @app.post("/register") |
| | def register(username: str = Form(...), password: str = Form(...)): |
| | token = register_user(username, password) |
| | return JSONResponse( |
| | content={"message": "User registered successfully", "token": token} |
| | ) |
| |
|
| |
|
| | @app.post("/login") |
| | def login(username: str = Form(...), password: str = Form(...)): |
| | if verify_user_password(username, password): |
| | token = get_user_token(username) |
| | return JSONResponse(content={"message": "Login successful", "token": token}) |
| | raise HTTPException(status_code=401, detail="Invalid credentials") |
| |
|
| |
|
| | @app.get("/glares") |
| | def get_glares(token: str): |
| | username = verify_token(token) |
| | if not username: |
| | raise HTTPException(status_code=401, detail="Invalid token") |
| | current = get_updated_glares(username) |
| | return {"username": username, "glares": current} |
| |
|
| |
|
| | |
| |
|
| |
|
| | @app.websocket("/ws/coinflip") |
| | async def coinflip(websocket: WebSocket): |
| | """Edge: 1%""" |
| | await websocket.accept() |
| | try: |
| | |
| | auth = await websocket.receive_json() |
| | token = auth.get("token") |
| | username = verify_token(token) |
| | if not username: |
| | await websocket.send_json({"error": "Invalid token"}) |
| | await websocket.close() |
| | return |
| |
|
| | |
| | balance = get_updated_glares(username) |
| | await websocket.send_json({"message": f"Welcome {username}", "glares": balance}) |
| |
|
| | while True: |
| | data = await websocket.receive_json() |
| | guess = data.get("guess") |
| | bet = data.get("bet", 0) |
| |
|
| | if not isinstance(bet, int): |
| | await websocket.send_json({"error": "Invalid bet"}) |
| | continue |
| |
|
| | if guess not in ["heads", "tails"] or bet <= 0: |
| | await websocket.send_json({"error": "Invalid bet or guess"}) |
| | continue |
| |
|
| | current = get_updated_glares(username) |
| | if current < bet: |
| | await websocket.send_json({"error": "Insufficient glares"}) |
| | continue |
| |
|
| | result = secrets.choice(["heads", "tails"]) |
| | win = result == guess |
| |
|
| | if win: |
| | |
| | commission = bet * 0.02 |
| | net_win = bet - commission |
| | update_user_glares(username, net_win) |
| | earnings = net_win |
| | else: |
| | commission = 0 |
| | update_user_glares(username, -bet) |
| | earnings = -bet |
| |
|
| | await websocket.send_json( |
| | { |
| | "guess": guess, |
| | "result": result, |
| | "outcome": "win" if win else "lose", |
| | "earnings": earnings, |
| | "commission": commission if win else 0, |
| | } |
| | ) |
| |
|
| | except WebSocketDisconnect: |
| | print("Disconnected") |
| | except Exception as e: |
| | await websocket.send_json({"error": str(e)}) |
| | await websocket.close() |
| |
|
| |
|
| | |
| |
|
| |
|
| | @app.websocket("/ws/roulette") |
| | async def roulette(websocket: WebSocket): |
| | await websocket.accept() |
| | try: |
| | |
| | auth = await websocket.receive_json() |
| | token = auth.get("token") |
| | username = verify_token(token) |
| | if not username: |
| | await websocket.send_json({"error": "Invalid token"}) |
| | await websocket.close() |
| | return |
| |
|
| | |
| | balance = get_updated_glares(username) |
| | await websocket.send_json({"message": f"Welcome {username}", "glares": balance}) |
| |
|
| | while True: |
| | data = await websocket.receive_json() |
| | bet = data.get("bet") |
| |
|
| | total_bet = sum(int(v) for v in bet.values()) |
| | for n in bet.values(): |
| | if not isinstance(n, int) or n < 0: |
| | await websocket.send_json({"error": "Invalid bet"}) |
| | continue |
| |
|
| | balance = get_updated_glares(username) |
| | if total_bet > balance: |
| | await websocket.send_json({"error": "Insufficient glares"}) |
| | continue |
| |
|
| | if total_bet <= 0: |
| | await websocket.send_json({"error": "Invalid bet"}) |
| | continue |
| |
|
| | earnings = 0 |
| |
|
| | chosen = secrets.choice(range(37)) |
| |
|
| | if chosen == 0: |
| | color = "green" |
| | elif chosen in [ |
| | 1, |
| | 3, |
| | 5, |
| | 7, |
| | 9, |
| | 12, |
| | 14, |
| | 16, |
| | 18, |
| | 19, |
| | 21, |
| | 23, |
| | 25, |
| | 27, |
| | 30, |
| | 32, |
| | 34, |
| | ]: |
| | color = "red" |
| | else: |
| | color = "black" |
| |
|
| | even_odd = "even" if chosen % 2 == 0 else "odd" |
| |
|
| | if isinstance(bet, dict): |
| | for number in range(37): |
| | if str(number) in bet: |
| | if ( |
| | not isinstance(bet[str(number)], int) |
| | or bet[str(number)] <= 0 |
| | ): |
| | await websocket.send_json({"error": "Invalid bet"}) |
| | continue |
| | if number == chosen: |
| | earnings += int(bet[str(number)]) * 35 |
| | else: |
| | earnings -= int(bet[str(number)]) |
| |
|
| | for col in ["red", "black"]: |
| | if col in bet: |
| | if not isinstance(bet[col], int) or bet[col] <= 0: |
| | await websocket.send_json({"error": "Invalid bet"}) |
| | continue |
| | if color == col: |
| | earnings += int(bet[col]) |
| | else: |
| | earnings -= int(bet[col]) |
| |
|
| | for eo in ["even", "odd"]: |
| | if eo in bet: |
| | if not isinstance(bet[even_odd], int) or bet[even_odd] <= 0: |
| | await websocket.send_json({"error": "Invalid bet"}) |
| | continue |
| | if eo == even_odd: |
| | earnings += int(bet[eo]) |
| | else: |
| | earnings -= int(bet[eo]) |
| |
|
| | for dozen in ["d1", "d2", "d3"]: |
| | if dozen in bet: |
| | if not isinstance(bet[dozen], int) or bet[dozen] <= 0: |
| | await websocket.send_json({"error": "Invalid bet"}) |
| | continue |
| | if chosen in range(1, 13) and dozen == "d1": |
| | earnings += int(bet[dozen]) * 2 |
| | elif chosen in range(13, 25) and dozen == "d2": |
| | earnings += int(bet[dozen]) * 2 |
| | elif chosen in range(25, 37) and dozen == "d3": |
| | earnings += int(bet[dozen]) * 2 |
| | else: |
| | earnings -= int(bet[dozen]) |
| |
|
| | for column in ["c1", "c2", "c3"]: |
| | if column in bet: |
| | if not isinstance(bet[column], int) or bet[column] <= 0: |
| | await websocket.send_json({"error": "Invalid bet"}) |
| | continue |
| | if chosen in range(1, 37): |
| | if column == "c1" and chosen % 3 == 1: |
| | earnings += int(bet[column]) * 2 |
| | elif column == "c2" and chosen % 3 == 2: |
| | earnings += int(bet[column]) * 2 |
| | elif column == "c3" and chosen % 3 == 0: |
| | earnings += int(bet[column]) * 2 |
| | else: |
| | earnings -= int(bet[column]) |
| | for half in ["h1", "h2"]: |
| | if half in bet: |
| | if not isinstance(bet[half], int) or bet[half] <= 0: |
| | await websocket.send_json({"error": "Invalid bet"}) |
| | continue |
| | if chosen in range(1, 19) and half == "h1": |
| | earnings += int(bet[half]) |
| | elif chosen in range(19, 37) and half == "h2": |
| | earnings += int(bet[half]) |
| | else: |
| | earnings -= int(bet[half]) |
| | for street in [ |
| | "s1", |
| | "s2", |
| | "s3", |
| | "s4", |
| | "s5", |
| | "s6", |
| | "s7", |
| | "s8", |
| | "s9", |
| | "s10", |
| | "s11", |
| | "s12", |
| | ]: |
| | if street in bet: |
| | if not isinstance(bet[street], int) or bet[street] <= 0: |
| | await websocket.send_json({"error": "Invalid bet"}) |
| | continue |
| | if street == f"s{(chosen - 1) // 3 + 1}": |
| | earnings += int(bet[street]) * 11 |
| | else: |
| | earnings -= int(bet[street]) |
| |
|
| | update_user_glares(username, earnings) |
| | await websocket.send_json( |
| | { |
| | "chosen": chosen, |
| | "color": color, |
| | "even_odd": even_odd, |
| | "earnings": earnings, |
| | } |
| | ) |
| |
|
| | print( |
| | f"Bet details: chosen={chosen}, color={color}, even_odd={even_odd}, earnings={earnings}" |
| | ) |
| | else: |
| | await websocket.send_json({"error": "Invalid bet"}) |
| | except WebSocketDisconnect: |
| | print("Disconnected") |
| | except Exception as e: |
| | await websocket.send_json({"error": str(e)}) |
| | await websocket.close() |
| |
|
| |
|
| | |
| |
|
| |
|
| | @app.websocket("/ws/spinner") |
| | async def spinner(websocket: WebSocket): |
| | """Edge: 0.988%""" |
| | await websocket.accept() |
| | try: |
| | |
| | auth = await websocket.receive_json() |
| | token = auth.get("token") |
| | username = verify_token(token) |
| | if not username: |
| | await websocket.send_json({"error": "Invalid token"}) |
| | await websocket.close() |
| | return |
| |
|
| | |
| | balance = get_updated_glares(username) |
| | await websocket.send_json({"message": f"Welcome {username}", "glares": balance}) |
| |
|
| | while True: |
| | data = await websocket.receive_json() |
| | bet = data.get("bet") |
| |
|
| | probs = [0.3333, 0.4291, 0.2376] |
| | mults = [0.0, 1.2, 2.0] |
| |
|
| | multiplier = weighted_choice(mults, probs) |
| |
|
| | print(type(bet), bet) |
| | if not isinstance(bet, int) or bet <= 0: |
| | await websocket.send_json({"error": "Invalid bet"}) |
| | continue |
| |
|
| | balance = get_updated_glares(username) |
| | if bet > balance: |
| | await websocket.send_json({"error": "Insufficient glares"}) |
| | continue |
| |
|
| | earnings = multiplier * bet - bet |
| | update_user_glares(username, earnings) |
| | await websocket.send_json({"multiplier": multiplier, "earnings": earnings}) |
| | except WebSocketDisconnect: |
| | print("Disconnected") |
| | except Exception as e: |
| | await websocket.send_json({"error": str(e)}) |
| | await websocket.close() |
| |
|
| |
|
| | |
| |
|
| |
|
| | @app.websocket("/ws/crash") |
| | async def crash(websocket: WebSocket): |
| | """Edge: 1%""" |
| | await websocket.accept() |
| | try: |
| | |
| | auth = await websocket.receive_json() |
| | token = auth.get("token") |
| | username = verify_token(token) |
| | if not username: |
| | await websocket.send_json({"error": "Invalid token"}) |
| | await websocket.close() |
| | return |
| |
|
| | |
| | balance = get_updated_glares(username) |
| | await websocket.send_json({"message": f"Welcome {username}", "glares": balance}) |
| |
|
| | while True: |
| | data = await websocket.receive_json() |
| | bet = data.get("bet") |
| |
|
| | if not isinstance(bet, int) or bet <= 0: |
| | await websocket.send_json({"error": "Invalid bet"}) |
| | continue |
| |
|
| | balance = get_updated_glares(username) |
| | if bet > balance: |
| | await websocket.send_json({"error": "Insufficient glares"}) |
| | continue |
| |
|
| | update_user_glares(username, -bet) |
| |
|
| | crash_point = round(min(secure_crash_point(), 100), 2) |
| |
|
| | multiplier = 1.0 |
| | cashout = 0.0 |
| | crashed = False |
| |
|
| | async def send_updates(): |
| | nonlocal multiplier, crashed |
| | while not crashed: |
| | await asyncio.sleep(0.01) |
| | multiplier += multiplier * 0.00075 |
| | await websocket.send_json({"multiplier": round(multiplier, 2)}) |
| | if multiplier >= crash_point: |
| | crashed = True |
| | await websocket.send_json({"crash": crash_point}) |
| |
|
| | async def receive_cashout(): |
| | nonlocal cashout, crashed |
| | while not crashed: |
| | try: |
| | msg = await asyncio.wait_for( |
| | websocket.receive_json(), timeout=0.01 |
| | ) |
| | if msg.get("action") == "cashout": |
| | cashout = multiplier |
| | crashed = True |
| | await websocket.send_json({"cashed_out": round(cashout, 2)}) |
| | except asyncio.TimeoutError: |
| | continue |
| |
|
| | await asyncio.gather(send_updates(), receive_cashout()) |
| |
|
| | if cashout: |
| | earned = cashout * bet |
| | update_user_glares(username, earned) |
| | await websocket.send_json( |
| | { |
| | "message": f"Cashout successful! Multiplier: {round(cashout, 2)}", |
| | "earnings": round(earned, 2), |
| | } |
| | ) |
| | elif crashed: |
| | await websocket.send_json( |
| | { |
| | "message": f"Game crashed at {round(crash_point, 2)}x! You lost your bet.", |
| | "earnings": 0, |
| | } |
| | ) |
| |
|
| | except WebSocketDisconnect: |
| | print("Disconnected") |
| | except Exception as e: |
| | await websocket.send_json({"error": str(e)}) |
| | await websocket.close() |
| |
|
| |
|
| | |
| |
|
| |
|
| | @app.websocket("/ws/mines") |
| | async def mines(websocket: WebSocket): |
| | """Edge: 1%""" |
| | await websocket.accept() |
| | try: |
| | |
| | auth = await websocket.receive_json() |
| | token = auth.get("token") |
| | username = verify_token(token) |
| | if not username: |
| | await websocket.send_json({"error": "Invalid token"}) |
| | await websocket.close() |
| | return |
| |
|
| | |
| | balance = get_updated_glares(username) |
| | await websocket.send_json({"message": f"Welcome {username}", "glares": balance}) |
| |
|
| | while True: |
| | data = await websocket.receive_json() |
| | bet = data.get("bet") |
| | mines = data.get("mines", 1) |
| |
|
| | if not isinstance(bet, int) or bet <= 0: |
| | await websocket.send_json({"error": "Invalid bet"}) |
| | continue |
| |
|
| | balance = get_updated_glares(username) |
| | if bet > balance: |
| | await websocket.send_json({"error": "Insufficient glares"}) |
| | continue |
| |
|
| | update_user_glares(username, -bet) |
| |
|
| | if mines < 1 or mines > 24 or not isinstance(mines, int): |
| | await websocket.send_json({"error": "Invalid number of mines"}) |
| | continue |
| |
|
| | positions = secrets.SystemRandom().sample(range(0, 25), mines) |
| | safe_positions = set(range(0, 25)) - set(positions) |
| | revealed = set() |
| | multiplier = 1.0 |
| |
|
| | while True: |
| | data = await websocket.receive_json() |
| | action = data.get("action") |
| |
|
| | if action == "reveal": |
| | position = data.get("position") |
| | if not isinstance(position, int) or position < 0 or position > 24: |
| | await websocket.send_json({"error": "Invalid position"}) |
| | continue |
| | if position in revealed: |
| | await websocket.send_json( |
| | {"error": "Position already revealed"} |
| | ) |
| | continue |
| | if position not in safe_positions: |
| | multiplier = 0 |
| | break |
| | revealed.add(position) |
| | safe_positions.remove(position) |
| | multiplier += (25 / len(safe_positions) - 1) * 0.99 |
| | await websocket.send_json( |
| | { |
| | "multiplier": round(multiplier, 2), |
| | "revealed": list(revealed), |
| | } |
| | ) |
| | elif action == "cashout": |
| | break |
| | else: |
| | await websocket.send_json({"error": "Invalid action"}) |
| | continue |
| | earned = bet * multiplier |
| | update_user_glares(username, earned) |
| | await websocket.send_json( |
| | { |
| | "multiplier": round(multiplier, 2), |
| | "earnings": round(earned, 2), |
| | "safe_positions": list(safe_positions), |
| | } |
| | ) |
| |
|
| | except WebSocketDisconnect: |
| | print("Disconnected") |
| | except Exception as e: |
| | await websocket.send_json({"error": str(e)}) |
| | await websocket.close() |
| |
|
| |
|
| | |
| |
|
| |
|
| | @app.websocket("/ws/tower") |
| | async def tower(websocket: WebSocket): |
| | """Edge: 1%""" |
| | await websocket.accept() |
| | try: |
| | |
| | auth = await websocket.receive_json() |
| | token = auth.get("token") |
| | username = verify_token(token) |
| | if not username: |
| | await websocket.send_json({"error": "Invalid token"}) |
| | await websocket.close() |
| | return |
| |
|
| | |
| | balance = get_updated_glares(username) |
| | await websocket.send_json({"message": f"Welcome {username}", "glares": balance}) |
| |
|
| | while True: |
| | data = await websocket.receive_json() |
| | bet = data.get("bet") |
| | |
| | difficulty = 1 |
| | if difficulty not in [1, 2, 3]: |
| | await websocket.send_json({"error": "Invalid difficulty"}) |
| | continue |
| |
|
| | if not isinstance(bet, int) or bet <= 0: |
| | await websocket.send_json({"error": "Invalid bet"}) |
| | continue |
| |
|
| | balance = get_updated_glares(username) |
| | if bet > balance: |
| | await websocket.send_json({"error": "Insufficient glares"}) |
| | continue |
| |
|
| | update_user_glares(username, -bet) |
| | safe_positions = list() |
| | if difficulty == 1: |
| | safe_positions = [secrets.randbelow(4) for _ in range(8)] |
| |
|
| | level = 0 |
| |
|
| | multiplier = 1.0 |
| |
|
| | while True: |
| | data = await websocket.receive_json() |
| | action = data.get("action") |
| |
|
| | if action == "reveal": |
| | position = data.get("position") |
| | if difficulty == 1: |
| | if position not in [0, 1, 2, 3]: |
| | await websocket.send_json({"error": "Invalid position"}) |
| | continue |
| | if position == safe_positions[level]: |
| | if level < 8: |
| | level += 1 |
| | multiplier += 3 / 4 * 0.99 |
| | safe_positions.remove(position) |
| | await websocket.send_json( |
| | { |
| | "level": level, |
| | "multiplier": round(multiplier, 2), |
| | } |
| | ) |
| | else: |
| | multiplier += 3 / 4 * 0.99 |
| | await websocket.send_json( |
| | { |
| | "level": level, |
| | "multiplier": round(multiplier, 2), |
| | "completed": True, |
| | } |
| | ) |
| | break |
| | else: |
| | multiplier = 0 |
| | break |
| |
|
| | elif action == "cashout": |
| | break |
| | else: |
| | await websocket.send_json({"error": "Invalid action"}) |
| | continue |
| | earned = bet * multiplier |
| | update_user_glares(username, earned) |
| | await websocket.send_json( |
| | { |
| | "multiplier": round(multiplier, 2), |
| | "earnings": round(earned, 2), |
| | "safe_positions": safe_positions, |
| | } |
| | ) |
| |
|
| | except WebSocketDisconnect: |
| | print("Disconnected") |
| | except Exception as e: |
| | await websocket.send_json({"error": str(e)}) |
| | await websocket.close() |
| |
|
| |
|
| | |
| |
|
| |
|
| | @app.websocket("/ws/blackjack") |
| | async def blackjack(websocket: WebSocket): |
| | """Edge: 1%""" |
| | await websocket.accept() |
| | try: |
| | |
| | auth = await websocket.receive_json() |
| | token = auth.get("token") |
| | username = verify_token(token) |
| | if not username: |
| | await websocket.send_json({"error": "Invalid token"}) |
| | await websocket.close() |
| | return |
| |
|
| | |
| | balance = get_updated_glares(username) |
| | await websocket.send_json({"message": f"Welcome {username}", "glares": balance}) |
| |
|
| | while True: |
| | data = await websocket.receive_json() |
| |
|
| | bet = data.get("bet") |
| | update_user_glares(username, -bet) |
| |
|
| | if not isinstance(bet, int) or bet <= 0: |
| | await websocket.send_json({"error": "Invalid bet"}) |
| | continue |
| |
|
| | balance = get_updated_glares(username) |
| | if bet > balance: |
| | await websocket.send_json({"error": "Insufficient glares"}) |
| | continue |
| |
|
| | update_user_glares(username, -bet) |
| | deck = [2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10, 11] * 4 |
| | secrets.SystemRandom().shuffle(deck) |
| |
|
| | done = False |
| |
|
| | earnings = 0 |
| |
|
| | while True: |
| | player_hand = [deck.pop(), deck.pop()] |
| | dealer_hand = [deck.pop(), deck.pop()] |
| |
|
| | player_total = sum(player_hand) |
| | dealer_total = sum(dealer_hand) |
| |
|
| | if player_total == 21: |
| | done = True |
| | earnings = bet * 1.5 + bet |
| | break |
| |
|
| | while True: |
| | action = await websocket.receive_json() |
| | if action.get("action") == "hit": |
| | player_hand.append(deck.pop()) |
| | player_total = sum(player_hand) |
| | if player_total > 21: |
| | done = True |
| | earnings = 0 |
| | break |
| | await websocket.send_json( |
| | {"player_hand": player_hand, "player_total": player_total} |
| | ) |
| | elif action.get("action") == "stand": |
| | break |
| | else: |
| | await websocket.send_json({"error": "Invalid action"}) |
| | continue |
| | if done: |
| | break |
| | while dealer_total < 17: |
| | dealer_hand.append(deck.pop()) |
| | dealer_total = sum(dealer_hand) |
| | if dealer_total > 21: |
| | done = True |
| | earnings = bet * 1 + bet |
| | break |
| | if done: |
| | break |
| | if player_total > dealer_total: |
| | earnings = bet * 1 + bet |
| | done = True |
| | elif player_total < dealer_total: |
| | earnings = 0 |
| | done = True |
| | else: |
| | earnings = bet |
| | done = True |
| | await websocket.send_json( |
| | { |
| | "player_hand": player_hand, |
| | "player_total": player_total, |
| | "dealer_hand": dealer_hand, |
| | "dealer_total": dealer_total, |
| | "earnings": earnings, |
| | } |
| | ) |
| | except WebSocketDisconnect: |
| | print("Disconnected") |
| | except Exception as e: |
| | await websocket.send_json({"error": str(e)}) |
| | await websocket.close() |
| |
|
| |
|
| | |
| |
|
| |
|
| | @app.websocket("/ws/hilo") |
| | async def hilo(websocket: WebSocket): |
| | """Edge: 1%""" |
| | await websocket.accept() |
| | try: |
| | |
| | auth = await websocket.receive_json() |
| | token = auth.get("token") |
| | username = verify_token(token) |
| | if not username: |
| | await websocket.send_json({"error": "Invalid token"}) |
| | await websocket.close() |
| | return |
| |
|
| | |
| | balance = get_updated_glares(username) |
| | await websocket.send_json({"message": f"Welcome {username}", "glares": balance}) |
| |
|
| | while True: |
| | data = await websocket.receive_json() |
| | bet = data.get("bet") |
| |
|
| | if not isinstance(bet, int) or bet <= 0: |
| | await websocket.send_json({"error": "Invalid bet"}) |
| | continue |
| |
|
| | balance = get_updated_glares(username) |
| | if bet > balance: |
| | await websocket.send_json({"error": "Insufficient glares"}) |
| | continue |
| |
|
| | update_user_glares(username, -bet) |
| |
|
| | cards = list(range(1, 53)) |
| | secrets.SystemRandom().shuffle(cards) |
| |
|
| | card = cards.pop() |
| | card_value = card % 13 |
| | if card_value == 0: |
| | card_value = 13 |
| |
|
| | multiplier = 1.0 |
| |
|
| | while True: |
| | action = await websocket.receive_json() |
| | if action.get("action") == "higher": |
| | next_card = cards.pop() |
| |
|
| | next_card_value = next_card % 13 |
| |
|
| | if next_card_value == 0: |
| | next_card_value = 13 |
| |
|
| | if next_card_value == card_value == 1: |
| | multiplier = 0 |
| | break |
| |
|
| | if next_card_value >= card_value: |
| | multiplier += (14 - card_value) / 12 * 0.99 |
| | else: |
| | multiplier = 0 |
| | break |
| | elif action.get("action") == "lower": |
| | next_card = cards.pop() |
| |
|
| | next_card_value = next_card % 13 |
| |
|
| | if next_card_value == card_value == 0: |
| | multiplier = 0 |
| | break |
| |
|
| | if next_card_value <= card_value: |
| | multiplier += (card_value) / 12 * 0.99 |
| | else: |
| | multiplier = 0 |
| | break |
| | elif action.get("action") == "skip": |
| | next_card = cards.pop() |
| | elif action.get("action") == "cashout": |
| | break |
| | else: |
| | await websocket.send_json({"error": "Invalid action"}) |
| | continue |
| |
|
| | earnings = bet * multiplier |
| | update_user_glares(username, earnings) |
| | await websocket.send_json( |
| | {"earnings": round(earnings, 2), "multiplier": round(multiplier, 2)} |
| | ) |
| | except WebSocketDisconnect: |
| | print("Disconnected") |
| | except Exception as e: |
| | await websocket.send_json({"error": str(e)}) |
| | await websocket.close() |
| |
|
| |
|
| | |
| |
|
| |
|
| | if __name__ == "__main__": |
| | import uvicorn |
| |
|
| | uvicorn.run("app:app", host="0.0.0.0", port=7860, reload=False) |
| |
|