import requests from flask import Flask, jsonify, render_template users = { "local_klink": "Francis", "naive_persian": "Vincent", "punctual_pyroar": "Seppe", "unmotivated_tentacruel": "Tybo", "outgoing_torchic": "Mathieu", "mercurial_celebi": "Rune", } def get_game_data(): res = requests.get("https://botbattle.be/api/games") return sorted(res.json(), key=lambda x: x['gid']) def get_data(): res = requests.get("https://botbattle.be/api/leaderboard") return res.json() def process_game_data(game_data): bots: dict[str, dict] = {} min_elo: int | None = None max_elo: int | None = None for game in game_data: for user in game['users']: username = user['username'] if username in users: if username not in bots: if min_elo is None: min_elo = user['elo'] max_elo = user['elo'] bots[username] = {'x': [], 'y': [], 'color_ring': user['color_ring'], 'color_body': user['color_body']} if user['elo'] < min_elo: min_elo = user['elo'] elif user['elo'] > max_elo: max_elo = user['elo'] bots[username]['x'].append(game['gid']) bots[username]['y'].append(user['elo']) return { 'bots': bots, 'min_elo': min_elo, 'max_elo': max_elo, 'game': game_data[-1]['gid'], } def filter_date(data): data = sorted(data, key=lambda x: x["elo"], reverse=True) filtered = [] for i, user in enumerate(data): user["global_position"] = i + 1 if user['username'] not in users: continue filtered.append(user) user['name'] = users[user['username']] return filtered app = Flask(__name__) @app.route("/") def index(): data = get_data() filtered = filter_date(data) return render_template("index.html", data=filtered) @app.route("/leaderboard") def leaderboard(): data = get_data() return jsonify(filter_date(data)) @app.route("/graph") def graph(): data = get_game_data() return jsonify(process_game_data(data)) if __name__ == "__main__": app.run(host='0.0.0.0')