Files
velox-bot/docs/commands.md
T
FernandoJVideiraandClaude Sonnet 5.5 fcf4f3ccbd Beta servers: testers can use beta features in servers whose owner opted in
- beta.Configure takes the opted-in servers; testers are looked up in the beta server
- beta commands registered per opted-in server and removed when it opts out
- beta.ServerEnabled for behaviour that no person triggers
- docs updated

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-23 01:25:50 +01:00

181 lines
8.8 KiB
Markdown

# Command reference
Every slash command the bot registers. Options marked with `*` are required. "Needs" is what the handler checks, not just what Discord shows in its menu. Commands that need a server cannot be used in DMs.
This page is written by hand from the command definitions in `internal/commands/*/public`. If you change a command, update it here and in `/help` (`internal/commands/help/help.go`). The [Features](features.md) page explains the behaviour behind them.
- [Fun](#fun)
- [Help](#help)
- [Leveling](#leveling)
- [Music](#music)
- [Meeting rooms](#meeting-rooms)
- [Moderation](#moderation)
- [Timezone and scheduling](#timezone-and-scheduling)
- [Projects](#projects)
- [Server setup (`/config`)](#server-setup-config)
- [Tickets](#tickets)
- [Security](#security)
- [Beta](#beta)
## Fun
Anyone can use these. `/rps`, `/rpsstats` and `/rpsleaderboard` work in servers only.
| Command | Options | What it does |
| --- | --- | --- |
| `/ping` | | Replies "Pong!" |
| `/joke` | `type` | A random joke, optionally of a type |
| `/coinflip` | | Heads or tails |
| `/dice` | `expr`* | Rolls a dice expression: `d20`, `2d20+1`, `2#d20+1` |
| `/rps` | `hand`* | Rock paper scissors against the bot |
| `/rpsstats` | | Your rock-paper-scissors record |
| `/rpsleaderboard` | | The server's leaderboard |
## Help
| Command | What it does |
| --- | --- |
| `/help` | DMs you a command reference |
## Leveling
| Command | Options | Needs | What it does |
| --- | --- | --- | --- |
| `/slvl toggle` | | Manage Server | Turns leveling on or off |
| `/slvl set` | `user`*, `level`* | Manage Server, leveling on | Sets a member's level |
| `/slvl set-channel` | `channel`* | Manage Server, leveling on | Where level-up messages go |
| `/slvl set-message` | `message`* | Manage Server, leveling on | The level-up message. Variables: `{user}`, `{level}` |
| `/slvl set-reward` | `level`*, `role`* | Manage Server, leveling on | Role granted at a level |
| `/rank` | `user` | Leveling on | A rank card for you or another member |
| `/leaderboard` | | Leveling on | Top 10 in the server |
| `/rewards` | | Leveling on | The role rewards |
## Music
| Command | Options | Needs | What it does |
| --- | --- | --- | --- |
| `/play` | `query`* | **DJ** role | Plays a song by name or URL |
| `/queue` | | **DJ** role | Shows the queue |
| `/volume` | `value`* (0 to 150) | **DJ** role | Sets the volume |
| `/music toggle` | | Manage Server | Turns music on or off in this server |
Requires Lavalink. See [Getting started](getting-started.md#optional-music-with-lavalink).
## Meeting rooms
Every subcommand needs **Manage Server** and works in servers only.
| Command | Options | What it does |
| --- | --- | --- |
| `/meeting add-lobby` | `channel`* (voice) | Makes a voice channel a lobby (up to 10 per server) |
| `/meeting remove-lobby` | `channel`* (voice) | Stops using it as a lobby |
| `/meeting lobbies` | | Lists the lobbies |
| `/meeting lock` | | Locks the room you are in |
| `/meeting lock-private` | | Locks it and hides it |
| `/meeting unlock` | | Unlocks it |
| `/meeting invite` | `user`* | Lets a user into a locked room |
| `/meeting uninvite` | `user`* | Removes that access |
## Moderation
Each subcommand checks the Discord permission in its "Needs" column.
| Command | Options | Needs | What it does |
| --- | --- | --- | --- |
| `/moderation purge` | `amount`* (1 to 100) | Manage Messages | Deletes recent messages in the channel |
| `/moderation timeout` | `user`*, `duration`* (`10m`, `1h`, `2h30m`, up to 28d), `reason` | Moderate Members | Times a member out |
| `/moderation untimeout` | `user`*, `reason` | Moderate Members | Removes a timeout |
| `/moderation kick` | `user`*, `reason` | Kick Members | Kicks a member |
| `/moderation ban` | `user`*, `delete_days` (0 to 7), `reason` | Ban Members | Bans a member |
| `/moderation unban` | `user_id`*, `reason` | Ban Members | Unbans by ID |
| `/moderation slowmode` | `channel`*, `seconds`* (0 to 21600) | Manage Channels | Sets slowmode, 0 turns it off |
## Timezone and scheduling
Anyone can use these.
| Command | Options | What it does |
| --- | --- | --- |
| `/timezone set` | `zone`* (IANA name, such as `Europe/Lisbon`) | Saves your timezone |
| `/timezone show` | | Shows it |
| `/schedule create` | | Opens a form (date, time, description) to request a session with a member |
| `/schedule list` | | Your upcoming sessions |
| `/schedule reschedule` | `id`* (from `/schedule list`), `datetime`* (UTC, `2006-01-02 15:04`) | Proposes a new time |
## Projects
| Command | Needs | What it does |
| --- | --- | --- |
| `/projects list` | | Active projects with creators and helpers |
| `/projects create` | Manage Server | Opens a form to create a project |
| `/projects add-helper` | Manage Server | Adds a helper to a project |
| `/projects close` | Manage Server | Closes a project |
## Server setup (`/config`)
Every subcommand needs **Manage Server**.
| Command | Options | What it does |
| --- | --- | --- |
| `/config setwelcomechannel` | `channel`* | Where welcome messages go |
| `/config setwelcomemessage` | `message`* | Welcome template. `{user}` is a mention, `{server}` the server name |
| `/config setwelcomedm` | `message`* | The welcome DM template |
| `/config setwelcomegif` | `url`* | Image or GIF for the welcome embed |
| `/config setdefaultrole` | `role`* | Role given on join |
| `/config setlogchannel` | `channel`* | Where logs go |
| `/config enablelogging` | | Turns logging on |
| `/config disablelogging` | | Turns it off |
| `/config addstreamer` | `username`* | Adds a Twitch streamer to watch |
| `/config removestreamer` | `username`* | Removes one |
| `/config settwitchnotificationchannel` | `channel`* | Where live alerts go |
## Tickets
| Command | Options | Needs | What it does |
| --- | --- | --- | --- |
| `/tickets setup` | `channel`*, `log-channel`, `staff-role` | Manage Server | Where tickets open and where closed ones are logged. `staff-role` creates a Support category if there are none yet |
| `/tickets category add` | `name`*, `staff-role`, `emoji`, `description` | Manage Server | Adds a category to the panel's dropdown |
| `/tickets category remove` | `name`* | Manage Server | Removes a category |
| `/tickets category list` | | Manage Server | Lists categories |
| `/tickets panel` | | Manage Server | Posts the panel, or updates it after changing categories |
| `/ticket add` | `user`* | The opener or staff | Adds someone to the ticket |
| `/ticket remove` | `user`* | Staff | Removes someone |
| `/ticket claim` | | Staff | Takes the ticket |
| `/ticket close` | `reason` | The opener or staff | Closes it and posts a transcript |
## Security
All of these are hidden from members without Manage Server (and `/lockdown` from those without Manage Channels), but **hiding is not the check**. The handlers check again, and some need the **server owner or someone on the trusted list** whatever Discord permissions a person has.
In this table "Manage Server" also lets Administrators and trusted members through.
| Command | Options | Needs | What it does |
| --- | --- | --- | --- |
| `/security status` | | Manage Server | What is on, and who is trusted |
| `/security toggle` | `feature`* (Join Gate, Raid mode, Anti-nuke, Heat), `on`* | Manage Server to turn on; owner or trusted to turn off | Turns a protection on or off |
| `/security alerts` | `channel`*, `role` | Owner or trusted | Alert channel and the role to ping |
| `/security quarantine-role` | `role` | Owner or trusted | Role given to quarantined members (empty for none) |
| `/security trust add` | `user` or `role` | Owner only | Exempts a user or role from anti-nuke |
| `/security trust remove` | `user` or `role` | Owner only | Removes that exemption |
| `/security quarantined` | | Manage Server | Lists quarantined members |
| `/security release` | `user`* | Owner or trusted | Releases a member and gives their roles back |
| `/security end-raid` | | Owner or trusted | Ends raid mode now |
| `/security snapshot` | | Manage Server | Saves roles and channels |
| `/security restore` | | Owner or trusted | Recreates deleted roles and channels from the latest snapshot |
| `/lockdown channel` | `channel` (default: this one) | Manage Channels | Locks a channel |
| `/lockdown server` | | Manage Channels | Locks every channel |
| `/lockdown joins` | `action`* (Kick or Ban) | Manage Channels | Kicks or bans new members until unlocked |
| `/unlock channel` | `channel` | Owner or trusted | Unlocks a channel |
| `/unlock server` | | Owner or trusted | Unlocks every channel |
| `/unlock joins` | | Owner or trusted | Lets people join again |
## Beta
| Command | Needs | What it does |
| --- | --- | --- |
| `/beta` | The bot's owner | Shows how beta access is set up. Registered in the beta server only |
Other beta commands appear only in the beta server and in servers whose owner opted in, and only testers can run them.
Beta features come and go. See [Beta features](beta-features.md).