Files
landing-factory/honest_online.py
2026-10-06 23:43:32 -07:00

33 lines
1.4 KiB
Python

#!/usr/bin/env python3
"""Honest online counter for SatsSpin chat: real presence tracking + zero default."""
import io
# 1. Server: track chat pollers, return honest onlineUsersCount
P = "/opt/casino/server-prod-new.cjs"
src = io.open(P, encoding="utf-8").read()
old = 'app.get("/api/chat/messages", (req, res) => res.json({ messages: state.chat.slice(-50) }));'
new = '''const chatPresence = {};
app.get("/api/chat/messages", (req, res) => {
const now = Date.now();
const auth = req.headers.authorization || "";
const tok = auth.startsWith("Bearer ") ? auth.slice(7) : "";
const uid = tok && state.sessions && state.sessions[tok];
const who = uid ? "u:" + uid : "ip:" + (req.ip || "?");
chatPresence[who] = now;
for (const k in chatPresence) if (now - chatPresence[k] > 60000) delete chatPresence[k];
res.json({ messages: state.chat.slice(-50), onlineUsersCount: Object.keys(chatPresence).length });
});'''
assert old in src, "chat/messages handler not found"
src = src.replace(old, new, 1)
io.open(P, "w", encoding="utf-8").write(src)
print("SERVER PRESENCE ADDED")
# 2. Frontend: no fake 432 default — start at 0 until the first real poll
B = "/opt/casino/dist/assets/index-CzzrlZy-.js"
bundle = io.open(B, encoding="utf-8").read()
old2 = "[A,v]=C.useState(432)"
assert old2 in bundle, "useState(432) not found"
bundle = bundle.replace(old2, "[A,v]=C.useState(0)", 1)
io.open(B, "w", encoding="utf-8").write(bundle)
print("BUNDLE DEFAULT ZEROED")