This commit is contained in:
2026-05-26 00:59:39 -04:00
commit 4f4f731bc7
35 changed files with 2417 additions and 0 deletions
+71
View File
@@ -0,0 +1,71 @@
# Commands
All commands require the caller to be in one of the `staff_groups` from config. Player-only (no console support yet).
## Punishments
### /ban <player> <reason>
Permanent ban. Active across all servers in the network within a few hundred ms. Online target is disconnected immediately with the reason.
### /tempban <player> <duration> <reason>
Time-limited ban. Duration syntax: `30s`, `5m`, `2h`, `7d`, `1w`. Expires automatically (the active-ban query filters by `expires_at`).
### /mute <player> <reason>
Permanent mute. Cancels `PlayerChatEvent` for the target on every server. Loaded into a per-server in-memory cache on the target's connect so chat enforcement doesn't hit MySQL on every message.
### /tempmute <player> <duration> <reason>
Time-limited mute. Same duration syntax as tempban.
### /kick <player> <reason>
One-shot disconnect. Recorded in history but doesn't persist beyond that (the target can rejoin immediately).
### /warn <player> <reason>
Recorded in history and shown to the target as a message if they're online. No connection or chat impact.
### /unban <player>
Revokes any active ban or tempban for the player. Marks the punishment row as `active=0`, fills `revoked_at` / `revoked_by_*`. Original row stays in history.
### /unmute <player>
Same as unban but for mutes. Also clears the entry from the mute cache on any server where the player is online.
## Staff chat
### /sc <message>
Broadcasts on the cross-server staff chat channel. Visible only to other players whose `getGroupsForUser` overlaps with `staff_groups`.
System events (a ban being issued, an unban) also post a line on this channel automatically.
## Lookup
### /lookup <player>
Shows:
- Player's last-known name and UUID
- Online status (and which server they're on, if any)
- First-seen and last-seen timestamps
- Any active ban
- Any active mute
If the player has never connected, only the name/UUID lookup happens via online players and may return nothing.
### /history <player>
Last 20 punishment entries for the player, most recent first. Each entry shows id, state (`ACTIVE` / `EXPIRED` / `REVOKED`), type, who issued it, when, and the reason.
## Common error cases
| Error message | Cause |
|---|---|
| "You do not have permission to use this command." | Caller isn't in any of `staff_groups`. |
| "No player found with that name (online or in history)." | Name doesn't match any online player or any name in `staff_players_seen`. |
| "Database error: ..." | MySQL query failed. Check NetworkCore connection (`/networkcore status`). |
| "Bad duration. Use 30s, 5m, 2h, 7d, 1w." | Duration string didn't parse. Last char must be `s`/`m`/`h`/`d`/`w`, prefix must be a positive integer. |