Discord Bot Commands Reference
Every GameGrid Discord Bot command - 46 top-level commands, 96 invocable paths once subcommands are counted - with its options, the access level it needs, the API scope behind it, and who sees the reply.
How to read this reference
The bot has 46 top-level commands. Several have subcommands, so there are 96 things you can actually type. All 96 are listed below.
Each table has four columns that matter:
- Level - the access level a member needs, granted with
/config role. See Discord Bot Permissions & Security. - Scope - the API scope the linked key must carry. Missing scope means the command fails no matter what Discord level you hold.
- Reply - Public means the whole channel sees the answer. Private means only you do.
- Options -
[optional],<required>.
Every command except /chat-unlink accepts an optional server-id. Leave it out and the bot uses the server bound to the channel, then the Discord server default. If neither is set it says so.
Two limits apply to everyone: 5 seconds between uses of the same command by the same person, and 5 commands running at once per Discord server.
/helpis exempt from both.
Servers and status
| Command | Options | Level | Scope | Reply |
|---|---|---|---|---|
/servers | - | Read Only | servers:read | Public |
/server | [server-id] | Read Only | servers:read | Public |
/status | [server-id] | Read Only | servers:read | Public |
/check-update | [server-id] | Read Only | servers:read | Public |
/players | [server-id] | Read Only | players:read + servers:read | Public |
/files | [path] [server-id] | Read Only | files:read | Public |
/servers is where everyone starts - it lists your servers with their ids, and every other command needs one of those ids or a channel binding.
/playerscalls two endpoints and needs bothplayers:readandservers:read. If the key holds only one of them the command still answers, but reports "contents not reported" instead of the list.
Lifecycle
| Command | Options | Level | Scope | Reply |
|---|---|---|---|---|
/start | [server-id] | Full Access | servers:lifecycle | Public |
/stop | [server-id] | Full Access | servers:lifecycle | Public |
/restart | [server-id] | Full Access | servers:lifecycle | Public |
/auto-restart | [hours] [server-id] | Split - see below | see below | Public |
/auto-restart behaves as two commands. With no hours, it shows the current schedule and needs only Read Only and servers:read. With hours (6, 12 or 24), it sets the schedule and needs Full Access and servers:write.
Lifecycle replies are public on purpose - the channel should be able to see who restarted the server.
Console
| Command | Options | Level | Scope | Reply |
|---|---|---|---|---|
/console | [server-id] [lines] | Console Access | console:read | Private |
/command | <command> [server-id] | Console Access | console:write | Private |
lines accepts 1 to 50 and defaults to a recent window.
Both are private, and both need Console Access rather than Read Only. Console output can contain RCON and admin passwords, and a command like a 7 Days to Die
getgameprefsor a Valheim bridge dump prints configuration wholesale. Credentials and IP addresses are redacted before anything is posted, but the reply is still kept private to the person who ran it.
/config command-channel can restrict /command to a single channel. It does not restrict /console.
Backups
| Command | Options | Level | Scope | Reply |
|---|---|---|---|---|
/backups list | [server-id] | Read Only | backups:read | Public |
/backups create | [label] [server-id] | Full Access | backups:create | Public |
/backups restore | <backup-id> [server-id] | Full Access | backups:restore | Private |
/backups delete | <backup-id> [server-id] | Full Access | backups:write | Public |
Four separate scopes, and none implies another. A key with
backups:readalone can list but not create; one withbackups:writecan delete but not restore. Grant only what you want the bot able to do - leavingbackups:restoreoff is a reasonable way to make sure nobody overwrites live data from Discord.
/backups create waits for the backup to finish, which on a large world can take a couple of minutes.
Settings
| Command | Options | Level | Scope | Reply |
|---|---|---|---|---|
/settings view | [category] [server-id] | Read Only | settings:read | Public |
/settings get | <key> [server-id] | Read Only | settings:read | Public |
/settings set | <key> <value> [server-id] | Full Access | settings:read + settings:write | Private |
/settings set needs both scopes: it reads the schema to validate your value before writing it.
When a setting needs a restart to take effect, the reply carries a Restart Now button. Pressing it re-checks that you still hold Full Access, and needs servers:lifecycle on the key.
Mods
| Command | Options | Level | Scope | Reply |
|---|---|---|---|---|
/mods list | [server-id] | Read Only | mods:read | Public |
/mods search | <query> [provider] [server-id] | Read Only | mods:read | Public |
/mods install | <provider> <mod-id> [file-id] [server-id] | Full Access | mods:write | Public |
/mods uninstall | <mod-id> [server-id] | Full Access | mods:write | Public |
/mods toggle | <mod-id> <enabled> [server-id] | Full Access | mods:write | Public |
provider is one of nexusmods, curseforge or steamworkshop. Which are available depends on the game - /mods search without a provider tells you which ones your server supports.
Windrose Plus
| Command | Options | Level | Scope | Reply |
|---|---|---|---|---|
/windrose status | [server-id] | Read Only | servers:read | Public |
/windrose config | [section] [server-id] | Read Only | servers:read | Public |
/windrose get | <key> [server-id] | Read Only | servers:read | Public |
/windrose set | <key> <value> [server-id] | Full Access | servers:read + windrose:admin | Private |
/windrose enable | [server-id] | Full Access | windrose:admin | Private |
/windrose disable | [server-id] | Full Access | windrose:admin | Private |
windrose:adminalso permits reading the RCON password in clear text over the API. Treat any key holding it as a credential in its own right.`/windrose` is a Windrose Plus admin command and stays one. The economy on Windrose runs on the same shared
/balance,/shop,/buy,/linkand admin commands every other game uses โ there are no/windroseeconomy verbs and none are planned. Enabling Windrose Plus is, however, what makes the economy available on a Windrose server, so/windrose enableis the first step to having one. See Windrose Economy and Shop.
Live map
| Command | Options | Level | Scope | Reply |
|---|---|---|---|---|
/map link | [server-id] | Read Only | map:read | Private |
/map players | [server-id] | Read Only | map:read | Private |
/map status | [server-id] | Read Only | map:read | Private |
/map region | <region-id> [server-id] | Read Only | map:read | Private |
/map leaderboard | [server-id] | Read Only | map:read | Public |
/map share | [server-id] | Read Only | map:read | Private |
Every reply is private except one, and both halves of that are deliberate.
/map playerssays where each player is standing. In a public channel that is a map of everybody's base handed to whoever is in the room, including the person who built the raid party./map leaderboardis the exception: it carries no positions and no platform identifiers, it is about a finished wipe rather than a live world, and posting it into a community's own channel is the point of having it.`/map share` never prints the link. It says whether a public map link is active and roughly when it expires, and nothing else โ the URL is a credential for an unauthenticated view of your world, and a chat message is not a place to keep one. Creating and revoking a link are owner actions in the panel, on the page where the revoke button sits next to it.
`/map` is read-only and stays that way. The panel's map can teleport a player, spawn an entity, call a horde and reset a region. None of those is a chat command. Teleport and spawn move or surprise people who are playing right now, and an admin doing that from a panel is looking at the consequence while one typing into Discord is not. Resetting a region destroys everything built in a 512 x 512 block area โ it is gated on a backup that has to finish first and on an owner-only permission, and a Discord role is not a GameGrid permission, so the bot cannot check the gate that action depends on.
/map region is 7 Days to Die only. Other games answer with what their map does have โ read /map status first.
Account, billing and support - Owner only
| Command | Options | Level | Scope | Reply |
|---|---|---|---|---|
/account | - | Owner | account:read | Private |
/billing | - | Owner | billing:read | Private |
/tickets | - | Owner | tickets:read | Private |
/ticket | <ticket-id> | Owner | tickets:read | Private |
These four look like reads and are gated at Owner, the highest level, because they expose account and billing information. Full Access is not enough.
billing:readis also missing from the "Discord Bot" scope preset, so/billingis the command most likely to fail on a freshly made key.
Economy - player commands
| Command | Options | Level | Scope | Reply |
|---|---|---|---|---|
/balance | [server-id] | Read Only | economy:read | Private |
/daily | [server-id] | Read Only | economy:write | Private |
/shop | [category] [search] [server-id] | Read Only | economy:read | Public |
/buy | <item> [quantity] [server-id] | Read Only | economy:write | Private |
/link | [character] [server-id] | Read Only | economy:write | Private |
/unlink | [server-id] | Read Only | economy:write | Private |
/my-transactions | [server-id] | Read Only | economy:read | Private |
/help-economy | - | None | - | Private |
These are Read Only on purpose. They are player actions on the player's own wallet, so ordinary members can use them without being given any control over your servers.
/help-economyneeds no level and works before/setuphas been run.
/shop and /buy suggest your own shop's categories and items as you type. quantity on /buy accepts 1 to 100.
`character` on `/link` is optional on most games and required on Windrose. Windrose has no in-game chat the platform can read, so instead of typing
!link CODEin game the player names their character and joins the server โ the link completes when that character is seen online. On every other game the option is ignored; the name is read from the!linkmessage itself. If a game needs it and it is missing, the bot says so and no code is sent.
Economy - admin commands
| Command | Options | Level | Scope | Reply |
|---|---|---|---|---|
/economy-setup | [server-id] | Setup user or server owner | economy:read | Private |
/economy-config | [currency-name] [server-id] | Setup user or server owner | economy:admin | Private |
/economy-stats | [server-id] | Full Access | economy:admin | Public |
/economy-links | [server-id] | Full Access | economy:read | Public |
/economy-link-remove | <user> [server-id] | Full Access | economy:read + economy:admin | Public |
/economy-earn | [setting] [value] [server-id] | Full Access | economy:admin + economy:read | Private |
/shop-admin | <action> [item-id] [price] [category] [server-id] | Full Access | economy:admin + economy:read | Public |
/award | <user> <amount> [reason] [server-id] | Full Access | economy:admin | Public |
/refund | <transaction-id> [reason] [server-id] | Full Access | economy:admin | Public |
`/economy-setup` and `/economy-config` are not level-gated. Like the
/configsubcommands, they are limited to the person who ran/setupand the Discord server owner. A Full Access holder is refused.
/shop-admin takes add, remove, list or edit as its action. /economy-earn takes enabled, playtime, kill, death, level, event or max.
`/award` only adds currency. The
amountoption has a minimum of 1, so Discord refuses a negative number before the command is even submitted. To take currency away, use the panel.
Chat bridge
| Command | Options | Level | Scope | Reply |
|---|---|---|---|---|
/chat-link | <channel> [server-id] | Full Access | economy:read | Public |
/chat-unlink | - | Full Access | - | Public |
/chat-link accepts a normal text channel only. /chat-unlink deliberately takes no options - it unlinks whatever this Discord server has bridged.
Setting up the bridge needs
economy:read, but running it needseconomy:writeas well. A key with onlyeconomy:readlinks successfully, then carries game chat into Discord while messages typed in Discord silently never arrive. If that is what you are seeing, check the scope before anything else.
See Discord Chat Bridge for how the bridge behaves once it is running.
Config presets and scheduled events
Presets are saved sets of settings; events apply a preset for a window of time and revert it afterwards - a 2x XP weekend, say.
| Command | Options | Level | Scope | Reply |
|---|---|---|---|---|
/preset list | [server-id] | Read Only | config_events:read | Public |
/preset view | <preset-id> [server-id] | Read Only | config_events:read | Public |
/preset create link | [server-id] | None | - | Public |
/preset delete | <preset-id> [server-id] | Full Access | config_events:write | Public |
/preset apply | <preset-id> <end> [server-id] | Full Access | config_events:write + config_events:control | Public |
/event list | [server-id] | Read Only | config_events:read | Public |
/event status | [server-id] | Read Only | config_events:read | Public |
/event log | <event-id> [server-id] | Read Only | config_events:read | Public |
/event schedule | <preset-id> <start> <end> [timezone] [name] [server-id] | Full Access | config_events:write | Public |
/event update | <event-id> [start] [end] [name] [server-id] | Full Access | config_events:write | Public |
/event start | <event-id> [server-id] | Full Access | config_events:control | Public |
/event end | <event-id> [server-id] | Full Access | config_events:control | Public |
/event cancel | <event-id> [server-id] | Full Access | config_events:control | Public |
/preset create link returns the panel URL for building a preset - presets are created in the panel, not in Discord. It needs no access level.
/preset apply is the one command needing two scopes: it creates an event and starts it immediately, and rolls the event back if the start fails.
Every
/presetand/eventreply is public, including refusals. A member without the required level sees "you need at least Read Only permission" posted in the channel rather than privately.
/preset view hides values that look like credentials. It deliberately does not hide things that look like IP addresses, because a game version such as 1.20.4.1 has the same shape.
Command Schedule (/command-schedule)
Manage scheduled recurring console commands from Discord. These commands let you create, list, edit, delete, toggle, run, and view the history of command schedules without opening the panel.
| Command | Options | Access Level | API Scope | Visibility |
|---|---|---|---|---|
/command-schedule list | [server-id] | Read Only | command_schedules:read | Public |
/command-schedule catalog | [server-id] | Read Only | command_schedules:read | Public |
/command-schedule show | <schedule-id> [server-id] | Read Only | command_schedules:read | Public |
/command-schedule create | <name> <command> <cron> [params] [timezone] [server-id] | Console | command_schedules:write | Public |
/command-schedule edit | <schedule-id> [name] [command] [cron] [params] [timezone] [server-id] | Console | command_schedules:write | Public |
/command-schedule delete | <schedule-id> [server-id] | Console | command_schedules:write | Public |
/command-schedule toggle | <schedule-id> [server-id] | Console | command_schedules:write | Public |
/command-schedule run | <schedule-id> [server-id] | Console | command_schedules:control | Public |
/command-schedule history | <schedule-id> [server-id] | Read Only | command_schedules:read | Public |
The command option takes a command ID from the catalog (e.g. saveworld, say, shutdown). Use /command-schedule catalog to see the available commands for your game.
The cron option takes a 5-field cron expression in UTC (e.g. 0 4 * * * for daily at 4 AM UTC, 0 * * * * for hourly, 0 0 * * 0 for weekly on Sunday). The minimum interval is 5 minutes.
The params option takes a JSON string (e.g. {"message":"Hello world"}). Use /command-schedule catalog to see which commands take parameters and what they are.
The timezone option takes an IANA timezone name (e.g. America/New_York). Defaults to UTC if omitted.
Examples:
/command-schedule create name:"Daily Save" command:saveworld cron:"0 4 * * *" timezone:"America/New_York"โ Save the world daily at 4 AM EST./command-schedule create name:"Hourly Announcement" command:say cron:"0 * * * *" params:"{\"message\":\"Server restarting soon\"}"โ Broadcast a message every hour./command-schedule run schedule-id:"abc12345"โ Run a schedule immediately./command-schedule history schedule-id:"abc12345"โ View the last 10 executions.
Setup and configuration
These are not gated by access level at all. /setup needs Discord's Manage Server permission the first time; every /config subcommand is limited to the person who ran `/setup` and the Discord server owner. All reply privately.
| Command | Options | Sets |
|---|---|---|
/setup | <api-key> | Links your API key. Re-linking is limited to the original setup user or server owner |
/config view | - | Shows the linked key id, channels, default server and every role grant |
/config role | <role> <level> | Grants a Discord role an access level |
/config default-server | <server-id> | The fallback server for commands with no server-id |
/config channel-server | <channel> [server-id] | Binds a channel to a server. Omit server-id to unbind |
/config log-channel | <channel> | Where command activity is logged |
/config alert-channel | <channel> | Where start / stop / crash alerts are posted |
/config command-channel | [channel] | Restricts /command to one channel |
/config live-console | <channel> [server-id] | Mirrors console output into a channel. Needs console:read |
/config live-logs | <channel> [server-id] | Mirrors log output into a channel. Needs logs:read |
/config live-stop | <channel> | Stops mirroring in that channel |
/config live-list | - | Lists active mirrors |
/config reset | - | Clears all bot configuration for this Discord server, after confirmation |
A successful `/setup` re-link clears every role grant, channel binding and live mirror. Run
/config viewand/config live-listfirst so you can put them back. Your log, alert and command channels and default server survive.
Help
| Command | Options | Level | Reply |
|---|---|---|---|
/help | - | None | Private |
/help-economy | - | None | Private |
/help shows the caller their own access level and the commands it allows, which makes it the quickest way to answer "why can't I do this". It is exempt from the cooldown and the concurrency limit, so it always answers.
When a command is refused
Two different systems can refuse a command, and the message tells you which.
| Message mentions | Gate | Fix |
|---|---|---|
| An access level - "you need at least Full Access" | Discord | /config role, or ask an admin |
| A scope | The API key | Create a new key in the panel with that scope, re-run /setup, re-apply role grants |
| No server specified | Neither | /servers, then /config default-server or /config channel-server |
| The server does not support this | Neither | The game does not have that feature. /status names the game |
| The command is unavailable for your account | Neither | The capability is turned off for your account - contact support |
The two gates are independent. Full Access with a key missing the scope fails, and a key with every scope grants nothing to a member the Discord gate refuses. See Discord Bot Permissions & Security.
