← Back to the site
Command staff only

Bot Documentation

Reference for the Discord bot that runs tickets and roster logs. Nothing here is in-character.

Permissions

Command tiers

Access is gated centrally in TieredCommandTree.interaction_check, not by per-command decorators, so the lists in config.py can't drift out of sync with the code. Anything unlisted is denied by default and logged.

01

Developer

DEV_USER_ID · falls back to administrators
Dev

Sole authority over server bootstrap and panel deployment — the commands that reshape the server itself.

/setup_server/setup_ticket_panel/refresh_commands
02

Heads

HEAD_ROLE_ID · falls back to Manage Server
Head

Every ticket action, plus the diagnostic commands.

/ticket …/healthcheck/ping
03

Command Staff

COMMAND_ROLE_ID · Heads included
Command

Works the tickets on the floor. See the note below — this tier currently has no commands assigned to it.

04

Members

Anyone in the guild
Public

Opens tickets through the panel and tracks their own.

/mytickets
⚠️
Command staff currently have no commands. Every /ticket subcommand sits in HEAD_COMMANDS, so a Command-role member who isn't a Head can't close, claim or rename a ticket. Move them into COMMAND_COMMANDS to fix — Heads keep access either way.
Capabilities

What it does

Each feature lives in its own cog, so anything you don't want can simply be unloaded.

🎫

Persistent panel

One dropdown, posted once, still working after restarts. Members pick a category and get their own channel.

📌

Claim & transfer

Staff claim with one button so two people never work the same request. Claims hand over at any time.

🚦

Priority levels

Low through Urgent, each with its own colour on the embed so the queue is triageable at a glance.

📄

Auto transcripts

Closing renders the full history to a text file and posts it to the log channel with a summary embed.

♻️

Reopen by number

A closed ticket can be recreated from its number, linking back to its archived transcript.

👋

Welcome embeds

New members get a branded greeting with their member count, plus rules and ticket-panel buttons.

🏗️

Server bootstrap

On join, the bot builds its info category, a command list channel, and a direct dev-support channel.

🛡️

Anti-spam limits

Per-user open ticket caps and a creation cooldown. Defaults to 2 open tickets and 60 seconds.

🗂️

Roster logs

Closing a Reserve, Retirement or LOA ticket parses the form inside it and files a structured entry in the matching log channel.

🔐

Tiered by default

One central gate decides who runs what. A new command with no tier is denied and logged — it can't accidentally ship wide open.

🩺

Health check

/healthcheck verifies every channel ID, role, permission and intent before members hit the problem.

Reference

Slash commands

Heads outrank Command staff everywhere. Anything unlisted is denied by default.

CommandTierDescription
/myticketsMemberList your currently open tickets.
/ticket closeHeadClose this ticket and archive its transcript.
/ticket addHeadGrant another member access to this ticket.
/ticket removeHeadRevoke a member's access to this ticket.
/ticket renameHeadRename the ticket channel.
/ticket transferHeadHand the claim to another staff member.
/ticket priorityHeadSet priority to low, normal, high or urgent.
/ticket reopenHeadRecreate a previously closed ticket by number.
/healthcheckHeadVerify configuration, permissions and intents.
/pingHeadCheck the bot's latency.
/setup_serverDevCreate the information category and its channels.
/setup_ticket_panelDevPost the persistent ticket panel in this channel.
/refresh_commandsDevRe-post the command list in the commands channel.
Ticket system

Categories and priorities

Every category opens a private channel visible only to the member and the Command role, named from its own slug.

📝
Resignation – Reservesres-reserves
🎖️
Resignation – Retirementres-retirement
🌴
Leave of Absenceloa
General Supportsupport
🚨
Player Reportsreport
📈
Promotion Requestpromo
🟢 Low 🔵 Normal — default 🟠 High 🔴 Urgent