import datetime from json import dumps, loads from flask import Flask, request import redis import base64 import re import requests app = Flask(__name__) DEV = False DB_KEY = "scores" if not DEV else "scores_dev" WEBHOOK_URL = "https://discord.com/api/webhooks/1233484325962518709/yUxyEYZzfxOvOhd3G892pSd4XHbwdj96UnLmL9oJXeimc7sqMfUPkGhs0VA-k34o-56J" db = redis.Redis( host='redis', port=6379, decode_responses=True ) def seconds2mmss(total_seconds: float): seconds: float = total_seconds % 60 minutes: int = int(total_seconds / 60.0) % 60 return "%02d:%05.2f" % (minutes, seconds) @app.route("/leaderboard", methods=["POST"]) def submit_score(): data = request.args.get('score') print(data) if not data.startswith("EGH"): return "Decryption Failure!", 403 score = base64.urlsafe_b64decode(data[3:].split("eHa")[0]).decode() uname = base64.urlsafe_b64decode(data.split("eHa")[1].split("lAx")[0]).decode() wave = base64.urlsafe_b64decode(data.split("eHa")[1].split("lAx")[1]).decode() if not re.match("^[A-Z]{3}$", uname): return "Invalid username", 405 db.zadd(DB_KEY, {(uname + "|" + score + "|" + wave): int(wave) * 1e12 - float(score)}) scores = [x.split("|") for x in db.zrevrange(DB_KEY, start=0, end=50)] position = db.zrevrank(DB_KEY, uname + "|" + score + "|" + wave) + 1 print(position) if position == 1: print("WR ALERT!!!!") if DEV: return requests.post(WEBHOOK_URL, json={"content": f":warning: <@&1234952370387943517> WR ALERT :warning:\n`{uname.upper()}` set a new WR by reaching wave {wave} in `{seconds2mmss(float(score))}`"}) if position > 50: position /= db.zcount(DB_KEY, "-inf", "inf") print(scores) return dumps({ "scores": scores, "position": position })