/server
Register a game server and check its collector connection.
Who can use it: League Organizers.
Registry of game servers the stat collector tracks. Once a server is added, the bot
keeps an RCON connection to it and records sessions according to its tracking profile — kills, deaths, score, rounds, objective holds — into the
/stats system, classified as
competitive / scrim / pug.
/server add
gameString(choice) — choose from the registered choices; the Discord catalog offers Mordhau and Chivalry: Medieval WarfarelabelString— short unique handle, e.g.comp-1(lowercase, dashes)hostString— server public IP or hostnameportInteger— the RCON port (TCP), not the game portpasswordString— the RCON password
The password is stored encrypted at rest (AES-256-GCM). Servers are identified
by host:port — adding the same address twice errors with the existing label, and
labels are unique per game. The collector attempts a connection after registration; an Online state confirms a successful probe. Connection health and tracking state are separate.
The same registry lives on the web at Manage League → Stats & game servers: the Add server button in Game servers opens a dialog asking for the label, host, RCON port, and RCON password.
The host must resolve to a public address. Private, loopback, link-local, and
cloud-metadata addresses (127.0.0.1, 10.x/172.16–31.x/192.168.x,
169.254.169.254, …) are rejected — the collector will never be pointed at an
internal service.
One server, many leagues. Two leagues can register the same host:port — Heir
keeps a single RCON connection and fans it out, and each league records into its own
data with its own tracking profile and minimum match format.
/server remove
gameString,labelString
Stops tracking. Already-recorded stats are kept.
/server list
Lists tracked servers with their labels and addresses (never passwords).
/server status
/server status currently replies that a required option is missing, because Discord
does not offer the game and label values it asks for. Check a game server from
Manage League → Stats & game servers on the website, or use /server list, until
the command is fixed.
When the command does receive a game and label, its private reply reports one of
these states:
- the last successful connection and response latency
- the latest connection error and when Heir last tried it (including refused, timed out, address-not-found, unreachable, or authentication failure)
- a connection attempt that is still waiting for a response
- no connection attempt yet, which normally means the collector will try within a minute of adding the server
The command does not expose a live map, player count, or session marker in its current response. Use the web tracking page for the richer tracking state.
Related config
/config stats-channel:— channel receiving live stat events (tracking started, round end, map end, tracking finished) with 🗑 Void / ✅ Approve buttons on each./config stats-approval:—manual(default): tracked stat matches are pending and count toward nothing until an organizer approves them;auto: they count immediately and organizers void the occasional bad one./config ref-role:— role allowed to use the in-game ref commands below./config series-format:— league series length used by the automatic result arbiter: Best of 1 / 3 / 5 / 7 (default Best of 5, first to 3)./config stats-leaderboard-channel:— channel holding the persistent stat leaderboard embeds (see/stats leaderboard)./config stats-leaderboard-buckets:— which buckets get their own embed there: a comma-separated subset ofcompetitive,casual,overall, orall/none(default:competitive,overall).
In-game announcements & ref commands
Every time a tracked map (SKM/HPT) starts, the bot announces in server chat:
[ETHR] Stat tracking active — Skirmish on Moshpit.
Players holding the Ref role (or Organizer role, or Administrator) — matched
via their linked PlayFab ID, so refs must have run /identity link — can control
tracking from in-game chat (.start, .stop, .void, .status, .red/.blue).
The full ref command reference lives with
Stat Tracking → In-game controls; a
forgotten-.stop nag and a 30-minute arm timeout guard against stray sessions.
Commands from anyone else are silently ignored, and every ref action is posted to the stats channel with who did it. Void/Approve toggle in both directions and every transition is audited. Voiding a round or game excludes just that data; voiding a stat match excludes all of it.
Website setup and troubleshooting
Use Connect a game server for Match, Duel, and Presence profiles, per-server overrides, and the first successful observation. Read tracking status if the server remains VERIFYING or combat data is absent. Duel and opt-in Deathmatch can record combat without creating a team match.