#!/usr/bin/env bash # A way back for a player whose browser lost their seat: the seat gets a new # token, the old one stops working, and the link printed carries the new one. # Whether the one asking holds that seat is the keeper's call; send the link # only to them. Runs ON the droplet, through the game server's keeper door. # hnefatafl-reseat.sh ROOM who sits at the table, and when each person last moved or spoke # hnefatafl-reseat.sh ROOM SEAT re-seat SEAT and print the link set -euo pipefail ROOM="${1:?usage: hnefatafl-reseat.sh ROOM [SEAT]}" DOOR="http://127.0.0.1:8789/keeper/rooms/${ROOM^^}" if [ $# -lt 2 ]; then curl -s "$DOOR" | python3 -c ' import datetime, json, sys r = json.load(sys.stdin) if "error" in r: sys.exit(r["error"]) print("room %s, %s" % (r["roomId"], "in play" if r["started"] else "not begun")) for s in r["seats"]: when = "bot" if s["bot"] else "never moved or spoke" if s["lastActed"] is None else "last acted " + datetime.datetime.fromtimestamp(s["lastActed"] / 1000, datetime.timezone.utc).strftime("%Y-%m-%d %H:%M UTC") print(" %-3s %-24s %s" % (s["id"], s["name"], when)) ' else curl -s -X POST -H 'content-type: application/json' -d "{\"seat\":\"$2\"}" "$DOOR/reseat" | python3 -c ' import json, sys r = json.load(sys.stdin) if "error" in r: sys.exit(r["error"]) print("%s has a new token; their old one opens nothing now. Send them this link:" % r["name"]) print(r["link"]) ' fi