Docs
Command Reference

`/server` <small>(Organizer)</small>

Registry of game servers the stat collector tracks. Once a server is added, the bot keeps an RCON connection to it and records Skirmish/Hardpoint sessions automatically — kills, deaths, score, rounds, objective holds — into the /stats system, classified as competitive / scrim / pug.

/server add

  • game String (choice) — currently Mordhau
  • label String — short unique handle, e.g. comp-1 (lowercase, dashes)
  • host String — server public IP or hostname
  • port Integer — the RCON port (TCP), not the game port
  • password String — 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 connects within a minute of adding.

The same registry lives on the web at Manage → Play → Servers: the Add server button on the Tracked servers card 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 minimum match format.

/server remove

  • game String, label String

Stops tracking. Already-recorded stats are kept.

/server list

Lists tracked servers with their labels and addresses (never passwords).

/server status

Live health check for every tracked server — each line shows one of:

  • 🟢 auth OK with round-trip latency, current mode/map, player count, and a 🎥 marker while a session is being recorded
  • 🔴 not connected (server down or port unreachable — reconnecting with backoff)
  • 🔐 auth failed — the stored RCON password is wrong; re-add the server
  • 🟠 connected but the probe timed out
  • ⚪ collector not attached yet (new servers connect within a minute)
  • /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 of competitive,casual,overall, or all / 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.

On this page