Docs · Reference
Buttons and commands
People act from Discord panels and the website. Buttons and selects are the primary path in the channels your setup creates; the dashboard holds configuration. Slash commands have been removed from the Discord picker entirely — every action lives on a panel, the dashboard, or the ?name text path.
Buttons first
Every command has a working button, panel control, or dashboard page — that parity is what allowed slash to be removed. If you preferred typing, use ?name anywhere the bot can read messages: it is the same handler the slash path used.
Registration channel
Three messages in the public registration channel — register and profile, rank and leaderboard, then claim or release a seat. Setup posts them from the website; staff do not type them into Discord.
Registration, slotlist, and profile
Registration. Use the buttons below to register a team or view the slotlist. Set your in-game identity with Set profile. Registering accepts the night's published rulebook when one is set. Staff run nights from the dashboard.
Row 1
- Button: Register team → modal Register a team
Register a team fields Field Required Night id Required Team name Required Teammate 2 Discord id (optional) Optional Teammate 3 Discord id (optional) Optional Teammate 4 Discord id (optional) Optional - Button: Register with code → modal Register with team code
Register with team code fields Field Required Night id Required Team code Required - Button: View slotlist → modal View slotlist
View slotlist fields Field Required Night id Required - Button: Set profile → modal Set your profile
Set your profile fields Field Required IGN (optional) Optional Character UID (optional) Optional Region (optional) Optional - Button: Show profile — Shows your stored profile — no modal.
Row 2
- Button: My slot → modal View my slot
View my slot fields Field Required - Button: My schedule — Lists your upcoming nights — the night id is optional. → modal View my schedule
View my schedule fields Field Required - Button: Check in → modal Check in
Check in fields Field Required Night id (not needed for schedule) Required - Button: Status → modal View my status
View my status fields Field Required - Button: View standings → modal View standings
View standings fields Field Required
Row 3
- Button: My slot state — Your own seat, the one deadline on it, and the fee state — read-only. → modal View my slot state
View my slot state fields Field Required - Button: Request transfer — Files a seat transfer for your held seat — recipient must Accept, then staff approve. Night id is the shared participant-modal field documented on Check in. → modal Request a seat transfer
Request a seat transfer fields Field Required Recipient team id Required Reason (min 3 characters) Required - Button: Accept transfer — Recipient team accepts a filed transfer by id — staff still approve. → modal Accept a seat transfer
Accept a seat transfer fields Field Required Transfer id Required - Button: Edit roster — Captain add/remove on the night’s team — same door as Discord /team roster roster-*. Night id is the shared participant-modal field documented on Check in. → modal Edit roster for this night
Edit roster for this night fields Field Required Type add or remove Required Member Discord id Required Reason (optional) Optional
Row 4
- Button: List open nights — Shows advance-bookable nights — no modal.
- Button: Book ahead → modal Book ahead
Book ahead fields Field Required Night id Required Team name Required
Claim, accept a hold, confirm, and release a seat
Claim, accept a hold, confirm, or release your team’s seat for this open night. When zero or many nights are open: Claim, accept a hold, confirm, or release your team’s seat — enter the event’s public id when asked.
Row 1
- Button: Claim seat — When exactly one night is open, the button acts for that night with no modal. → modal Claim a seat
Claim a seat fields Field Required Event public id Required - Button: Accept hold — Converts a timed held seat (lottery / fair-queue / staff reassign) to allocated. → modal Accept a seat hold
Accept a seat hold fields Field Required Event public id Required - Button: Confirm seat — Confirm-to-keep on an allocated seat — distinct from claim. → modal Confirm a seat
Confirm a seat fields Field Required Event public id Required - Button: Release seat — Same sole-night shortcut as Claim seat. → modal Release a seat
Release a seat fields Field Required Event public id Required
Staff-ops channel
One private channel (hidden from @everyone) carries two panel messages — three Discord action rows each. Seeing the channel is not permission to act: every control still checks your organisation role.
Panel 1 — evidence, events, standings
Buttons only, no body text. Staff only — every action is still checked against your role.
Row 1 — evidence
- Button: Check extraction status → modal Extraction status
Extraction status fields Field Required Extraction run id Required - Button: Manual score entry → modal Manual score entry
Manual score entry fields Field Required Event id Required Match id Required Scoreboard (one team per line) Required
Row 2 — events
- Button: Check status → modal Check event status
Check event status fields Field Required Event id Required - Button: Postpone → modal Postpone event
Postpone event fields Field Required Event id Required New scheduled start (ISO-8601) Required Reason Required - Button: Create event — Replies privately with a one-time link to the dashboard create-event wizard — the form has more than three fields, and a Discord form holds at most three.
- Button: Move event stage → modal Move event stage
Move event stage fields Field Required Event id Required Move to state Required Reason Optional
Row 3 — standings
- Button: Show standings → modal Show standings
Show standings fields Field Required Stage id Required Team lookup (optional) Optional - Button: Adjust points — Replies privately with a one-time link to the dashboard standings page, which carries the Adjust points form — the form has more than three fields, and a Discord form holds at most three.
Panel 2 — scrim nights, seed and lobbies
Buttons only, no body text. Staff only — every action is still checked against your role.
Row 1 — registration open/close
- Button: Open registration → modal Open registration
Open registration fields Field Required Scrim night id Required Reason (optional; required on reopen) Optional - Button: Close registration → modal Close registration
Close registration fields Field Required Scrim night id Required Reason (optional) Optional - Button: Check-in → modal Check-in
Check-in fields Field Required Scrim night id Required Reason (optional) Optional - Button: Go live → modal Go live
Go live fields Field Required Scrim night id Required Reason (optional) Optional - Button: Complete → modal Complete scrim night
Complete scrim night fields Field Required Scrim night id Required Confirm: why is this night complete? Required
Row 2 — mint and series
- Button: Mint scrim night → modal Mint scrim night
Mint scrim night fields Field Required Series id Required Date YYYY-MM-DD (blank = tonight) Optional Capacity override (optional) Optional - Button: Create series — Replies privately with a one-time link to the dashboard Nights page and its full series form — the form has more than three fields, and a Discord form holds at most three.
- Button: Cancel night → modal Cancel scrim night
Cancel scrim night fields Field Required Scrim night id Required Confirm: why is this night cancelled? Required - Button: Show night → modal Show scrim night
Show scrim night fields Field Required Scrim night id Required - Button: List nights → modal List scrim nights
List scrim nights fields Field Required Series id Required Scope: tonight or upcoming Required
Row 3 — stage structure
- Button: Seed stage — Replies privately with a one-time link to the dashboard Events page, where each stage carries its seed form — the form has more than three fields, and a Discord form holds at most three.
- Button: Split lobbies → modal Split lobbies
Split lobbies fields Field Required Stage id Required Teams per lobby Required - Button: Bulk series move → modal Bulk series move
Bulk series move fields Field Required Series id Required Target state Required Reason (if cancel/pause/archive/reopen) Optional
Website
Operator configuration belongs on the dashboard, not as Discord buttons. 8 slash families map to 6 dashboard paths:
| Slash (while mounted) | Dashboard | What it is for |
|---|---|---|
| /setup-link | /onboarding | Guild-connect claim — the onboarding wizard. |
| /setup-status | /server-setup | Setup checklist and missing steps (with /setup-apply and /setup-map). |
| /setup-apply | /server-setup | Apply keyed Create-this steps — same Server setup page. |
| /setup-map | /server-setup | Adopt / custom / default mapping for a setup step — same Server setup page. |
| /event results evidence-submit | /results | Upload result evidence (Discord modals cannot carry attachments). |
| /event scrim fee-* | /events/fees | Fee flags, grants, and unpaid chase. |
| /team roster code-* | /team-codes | Mint, lookup, and revoke team codes. |
| /team roster lock-* | /events | Lock or unlock event roster edits. |
Bot-commands channel
Setup provisions a bot-commands channel and restricts Use Application Commands to it: guild-wide the permission is denied for @everyone, then allowed back only on that channel. With slash removed from the registry the picker is empty everywhere; the posture stays in place as belt-and-braces, and the channel remains the natural home for typed ?name commands. Panel buttons and modals work in every channel; they never needed the picker.
Every command that used to be slash still answers as ?name — same handler, same permissions, same refusal wording. Examples: ?sticky, ?slot, ?punish.
Slash commands (removed)
Slash commands were removed from Discord's registry once every command had a button, panel, or dashboard surface. The handlers stay mounted: a stale Discord client that still offers a cached command gets a clear "no longer recognised" reply, and ?name covers anyone who prefers typing. There is nothing to relearn — the panels above are the same actions.
If a control refuses, it names the reason rather than failing silently — a missing permission is reported as that permission. See Troubleshooting.