Leaderboard and dynamic layout

This commit is contained in:
2026-10-21 11:53:47 -04:00
parent 77ec52b053
commit 02e7bcf293
4 changed files with 161 additions and 17 deletions
+16
View File
@@ -310,6 +310,19 @@ def public_press(p):
}
def public_leaderboard():
"""Public score totals only; do not expose sessions or individual presses."""
scores = {
pid: {"name": player["name"], "total_points": 0, "press_count": 0}
for pid, player in state["players"].items()
}
for press in state["presses"]:
score = scores[press["player_id"]]
score["total_points"] += press["points"]
score["press_count"] += 1
return sorted(scores.values(), key=lambda p: (-p["total_points"], p["name"].lower()))
def global_stats():
counts = empty_zone_counts()
for p in state["presses"]:
@@ -397,6 +410,9 @@ class Handler(BaseHTTPRequestHandler):
"total_presses": len(state["presses"]),
"zones": ZONES,
})
if path == "/api/leaderboard":
with lock:
return self.send_json(HTTPStatus.OK, {"leaderboard": public_leaderboard()})
if path == "/api/me":
with lock:
pid = self.authed_player()