Skip to main content

Discord Bot Commands Reference

Every GameGrid Discord Bot command - 52 top-level commands, 173 invocable paths once subcommands are counted - with its options, the ability it needs, the API scope behind it, and who sees the reply.

How to read this reference

The bot has 52 top-level commands. Several have subcommands, so there are 173 things you can actually type. All 173 are listed below.

Each table has four columns that matter:

  • Level - the smallest preset that includes the ability the command needs. Abilities are granted per Discord role with /permissions grant; the preset names (member, operator, moderator, admin) are ready-made sets you can start from and then adjust one ability at a time, so a role can hold the one ability a command needs without the rest of its preset. See Discord Bot Permissions & Security.
  • Scope - the API scope the linked key must carry. Missing scope means the command fails whatever abilities your Discord roles hold.
  • Reply - Public means the whole channel sees the answer. Private means only you do.
  • Options - [optional], <required>.

Commands that act on one server take a server-id - optional on most, required on /buy, /kits show and /kits claim, where the item and kit suggestions need the server first. Leave an optional one 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. /help is exempt from both.

Servers and status

CommandOptionsLevelScopeReply
/servers-memberservers:readPublic
/server[server-id]memberservers:readPublic
/status[server-id]memberservers:readPublic
/check-update[server-id]memberservers:readPublic
/players[server-id]memberplayers:read + servers:readPrivate
/files[path] [server-id]memberfiles:readPublic

/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.

/players calls two endpoints and needs both players:read and servers:read. If the key holds only one of them the command still answers, but reports "contents not reported" instead of the list. The reply is private to you, because the lists name your players and your bans; an entry with no name shows as "(unnamed player)", never an account id.

Lifecycle

CommandOptionsLevelScopeReply
/start[server-id]moderatorservers:lifecyclePublic
/stop[server-id]moderatorservers:lifecyclePublic
/restart[server-id]moderatorservers:lifecyclePublic
/auto-restart[hours] [server-id]Split - see belowsee belowPublic

/auto-restart behaves as two commands. With no hours, it shows the current schedule and needs only server.autorestart.read (the member preset) and servers:read. With hours (6, 12 or 24), it sets the schedule and needs server.autorestart.write (the moderator preset) and servers:write.

Lifecycle replies are public on purpose - the channel should be able to see who restarted the server.

/start only works on a server that is stopped, failed or needs attention, and /stop only on one that is running or starting. If the server is in another state the bot shows the reason instead of changing anything: for example a server that is still being set up or waiting for capacity cannot be started yet, a running server is "already running", a server that is not running cannot be stopped, and a server that has not been placed on a host yet cannot be started or restarted.

Console

CommandOptionsLevelScopeReply
/console[server-id] [lines]operatorconsole:readPrivate
/command<command> [server-id]operatorconsole:writePrivate

lines accepts 1 to 50 and defaults to a recent window. /console and the reply to /command leave out players' chat lines unless the bot's key may read chat (player_metrics:chat, which the bot preset does not include).

Both are private, and both need the `operator` preset rather than `member`. Console output can contain RCON and admin passwords, and a command like a 7 Days to Die getgameprefs or 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

CommandOptionsLevelScopeReply
/backups list[server-id]memberbackups:readPublic
/backups create[label] [server-id]moderatorbackups:createPublic
/backups restore<backup-id> [server-id]moderatorbackups:restorePrivate
/backups delete<backup-id> [server-id]moderatorbackups:writePublic

Four separate scopes, and none implies another. A key with backups:read alone can list but not create; one with backups:write can delete but not restore. Grant only what you want the bot able to do - leaving backups:restore off 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

CommandOptionsLevelScopeReply
/settings view[category] [server-id]membersettings:readPublic
/settings get<key> [server-id]membersettings:readPublic
/settings set<key> <value> [server-id]moderatorsettings:read + settings:writePrivate
/settings table list[key] [server-id]membersettings:readPublic
/settings table add<name> [values] [key] [server-id]moderatorsettings:read + settings:writePrivate
/settings table edit<name> <values> [key] [server-id]moderatorsettings:read + settings:writePrivate
/settings table remove<name> [key] [server-id]moderatorsettings:read + settings:writePrivate
/settings table password<name> [key] [server-id]moderatorsettings:read + settings:writePrivate
/settings table show-password<name> [key] [server-id]moderatorsettings:read + settings:writePrivate

/settings set needs both scopes: it reads the schema to validate your value before writing it.

`/settings table` is for a setting that is a list of named entries - Enshrouded's user groups are one: each group has a name, a password, reserved slots and permission switches. list shows every entry with its password only as *set* or *none*. add takes the new entry's name and, in values, its other columns - reservedSlots=2, canKickBan=no - and checks them the way the control panel's form does: the name must be new, and reserved slots cannot be more than your server's slots. edit changes an entry's other columns, remove deletes one, password gives one a new password, and show-password shows one entry's current password so you can hand it to that group's players. Leave key out when the game has only one list setting.

A password is never typed into a command. Everyone in the channel can see a command's options, so add and password reply privately with a button that opens a private form, which only you can open. What you type there goes straight to your server: it is never shown back, posted in the log channel or written to a log. Every other entry keeps the password it already had.

`show-password` replies to you alone. The password is in a private reply that nobody else in the channel sees; dismiss it when you are done. It needs settings.write here and settings:write on the key, because a group password is as sensitive as changing one. The log channel, if you have set one, records who looked at which entry's password, never the password itself, and GameGrid's own audit log records each one the same way.

When a setting needs a restart to take effect, the reply carries a Restart Now button. Pressing it re-checks that you hold server.restart, and needs servers:lifecycle on the key.

Mods

CommandOptionsLevelScopeReply
/mods list[server-id]membermods:readPublic
/mods search<query> [provider] [server-id]membermods:readPublic
/mods install<provider> <mod-id> [file-id] [server-id]moderatormods:writePublic
/mods uninstall<mod-id> [server-id]moderatormods:writePublic
/mods toggle<mod-id> <enabled> [server-id]moderatormods:writePublic

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

CommandOptionsLevelScopeReply
/windrose status[server-id]memberwindrose:adminPublic
/windrose config[section] [server-id]memberwindrose:adminPublic
/windrose get<key> [server-id]memberwindrose:adminPublic
/windrose set<key> <value> [server-id]moderatorservers:read + windrose:adminPrivate
/windrose enable[server-id]moderatorwindrose:adminPrivate
/windrose disable[server-id]moderatorwindrose:adminPrivate

Every /windrose subcommand, the read-only ones included, needs windrose:admin on the key: it is the Customer API's only Windrose Plus scope. It also 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, /link and admin commands every other game uses โ€” there are no /windrose economy verbs and none are planned. Windrose Plus is, however, what carries the economy on a Windrose server, and GameGrid installs it on every Windrose server by itself, so there is no first step: /windrose enable only asks for the install now, and /windrose disable answers that Windrose Plus is managed by GameGrid and cannot be switched off. See Windrose Economy and Shop.

Live map

CommandOptionsLevelScopeReply
/map link[server-id]membermap:readPrivate
/map players[server-id]membermap:readPrivate
/map status[server-id]membermap:readPrivate
/map region<region-id> [server-id]membermap:readPrivate
/map leaderboard[server-id]membermap:readPublic
/map share[server-id]membermap:readPrivate

Every reply is private except one, and both halves of that are deliberate. /map players says 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 leaderboard is 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. For a game whose world is the same on every server, such as Enshrouded, /map status also says whether the map of your server's game build is ready, or whether an earlier build's map is being shown; /map link opens it.

DayZ

CommandOptionsLevelScopeReply
/dayz players[server-id]member (ingame.read)ingame:readPrivate
/dayz killfeed[count] [visibility] [server-id]member (ingame.read)ingame:readPrivate unless visibility posts it
/dayz broadcast<message> [title] [server-id]ingame.message (the operator preset)ingame:messagePrivate
/dayz map[server-id]member (map.read)map:readPrivate
/dayz ring-map[visibility] [server-id]map.read and ingame.messagemap:readPublic unless visibility is Only me

/dayz answers on DayZ servers only; on any other game it says the server is not a DayZ server. players and map read what the GameGrid DayZ server mod reports, so they answer while the server is running and the mod has reported. killfeed reads GameGrid's own record of the deaths the mod reported, so it answers while the server is stopped too, and it marks a death in a Battle Royale round Battle Royale. count is 1 to 20 and defaults to 10.

`/dayz ring-map` is the one reply that is public by default. It shares the Battle Royale ring map link the round running now was given: the circles, the clock and how many players are left, never where a player is standing. Anybody holding the link can open it, which is why it needs ingame.message as well as map.read.

`/dayz` is read-only apart from `broadcast`. There is no teleport, heal, kick or spawn from Discord, for the reason /map gives. Everything else about DayZ in the API and the bot is in DayZ in the Customer API and the Discord Bot.

Metrics (/metrics)

Statistics GameGrid keeps for every server. Every number comes from the same place as the Metrics page in the panel.

CommandOptionsLevelScopeReply
/metrics summary[server-id] [range] [visibility]metrics.read (the operator preset)metrics:readPrivate unless visibility posts it
/metrics uptime[server-id] [range] [visibility]metrics.readmetrics:readPrivate unless visibility posts it
/metrics peak[server-id] [range] [visibility]metrics.readmetrics:readPrivate unless visibility posts it
/metrics top[stat] [server-id] [range] [count]metrics.players.read (the operator preset)player_metrics:readAlways private
/metrics player<name> [server-id]metrics.players.readplayer_metrics:readAlways private
/metrics places[server-id] [range] [kind]metrics.readmetrics:readAlways private
/metrics sessions<player> [server-id] [range]metrics.players.readplayer_metrics:readAlways private
/metrics killfeed[server-id] [count] [pvp-only] [player]metrics.players.readplayer_metrics:readAlways private
/metrics new-season[server-id] [name]metrics.season (the admin preset)metrics:adminAlways private
/metrics alts<player> [server-id]metrics.players.alts (the moderator preset)player_metrics:altsAlways private
/metrics watch add<player> <reason> [server-id]metrics.players.watch (the moderator preset)player_metrics:writeAlways private
/metrics watch remove<player> [server-id]metrics.players.watchplayer_metrics:writeAlways private
/metrics watch list[server-id]metrics.players.watchplayer_metrics:readAlways private

summary shows players online (peak and average), unique and new players, sessions, deaths, uptime and a small chart of players online. uptime shows availability, crashes, restarts by cause and the longest outage. peak draws the busiest hours as a weekday chart in the timezone set with /config timezone, with the three busiest slots and the best time for an event. range is the last 24 hours (default), 7 days or 30 days.

top ranks players by playtime (default), kills, deaths, K/D, distance, sessions or logins; count is 1 to 25 and defaults to 10. player shows one player: last seen, playtime, sessions, rank and the names they used. sessions lists one player's latest sessions. For these three, range is this season (default), the last 7 or 30 days, or all seasons, and name and player suggest names as you type. A statistic the game does not report, or one the server does not record yet, is said in words, never shown as zero.

Only `summary`, `uptime` and `peak` can be posted in the channel. They are counts with no player names. Anything that names players or shows where they spend time is only ever shown to the person who asked, so /metrics cannot be used to publish a leaderboard: public leaderboards are /leaderboard (below), which shows only boards you switched on. Replies name players by name, never by an ID.

`/metrics new-season` closes the current stats season and starts the next. Nothing is deleted. It first shows what resets to zero (player kills, deaths, playtime, sessions, distance, places, the ranking) and what stays (server history, earlier seasons, names used, economy balances), with a Confirm button only you can press, for 60 seconds. The key needs metrics:admin and must be created by the account owner or an administrator.

summary, uptime and peak attach a chart image when GameGrid can draw one; otherwise they keep the text chart.

killfeed lists the latest kills from the last 7 days, newest first: who killed whom, the weapon, the distance and the hit zone where the game reports them. On a game that reports deaths but no kills it lists the deaths and how they happened. count is 1 to 20 (default 10), pvp-only keeps players killing players, and player shows one player's kills and deaths. Kills read from a server log are marked approximate.

alts shows a player's possible alternative accounts: each one by name, why (for example "Connected from the same connection" or "Linked to the same Discord account"), how confident (low, medium or high, with the number) and when it was first seen, plus the countries the player connected from. It is a hint, never proof, and the bot never shows an address. The key needs player_metrics:alts, which no key preset includes: add it to the bot's key yourself if you want this command. See Metrics: Moderation.

watch add puts a player On Watch with a reason, so you are told when they connect: in the panel and in the channel set with /config moderation-channel. For a player the game identifies by an account id, the watch covers every server on your account. watch remove takes them off, and watch list shows who is On Watch and why.

Leaderboards (/leaderboard)

Every leaderboard is off until you switch it on (Metrics, Settings, Player access, and the board itself in Metrics, Players, Leaderboards). Names only; players you hide are never named.

CommandOptionsLevelScopeReply
/leaderboard kills, /leaderboard earners, /leaderboard wealth, /leaderboard distance, /leaderboard playtime, /leaderboard deaths, /leaderboard survival, /leaderboard events, /leaderboard places[window] [server-id]None: anyone in your Discordmetrics:readPrivate unless you chose to show /leaderboard replies in the channel
/leaderboard setup<board> [channel] [window] [schedule] [time] [weekday] [layout] [size] [public] [server-id]leaderboards.manage (the moderator preset)leaderboards:writePrivate
/leaderboard post<board or all> [server-id]leaderboards.manageleaderboards:writePrivate

A board answers /leaderboard only when /leaderboard command is on in Player access and the board's Public command is on; otherwise the reply is "This leaderboard is not enabled on this server." A player whose Discord is linked to your economy also sees their own rank. Each member can ask once every 30 seconds unless you change it. setup switches a board on with its channel and schedule (hourly, daily or weekly, at a time in /config timezone); post posts it now. A posted board is one message, edited in place by every later post. The bot posts a board only into a channel of the Discord server where you ran setup (and which is linked to your account); it never posts into another server's channel.

Your own statistics (/my)

Off until you switch Player self-service on in Player access (Metrics, Settings). Each member sees only their own statistics, through their linked Discord (/link), and only the sections you shared. No option names another player. Every reply is private. The command is /my, not /me: Discord has its own built-in /me, which takes that name, so /me stats only posts the words in italics.

CommandOptionsLevelScopeReply
/my stats, /my playtime, /my travel[window] [share] [server-id]None: any linked memberplayers_self:readPrivate; share also posts it in the channel only if you allow it
/my wealth, /my events[share] [server-id]None: any linked memberplayers_self:readPrivate; share as above
/my leaderboard-hide, /my leaderboard-mention<on or off> [server-id]None: any linked memberplayers_self:writePrivate
/my api-token create, /my api-token revoke[server-id]None: any linked memberplayers_self:writePrivate; the token is shown once

leaderboard-hide always works for a linked member, even with self-service off. A section you did not share answers "Your server's owner has not shared this." See Player Self-Service.

Account, billing and support - admin preset only

CommandOptionsLevelScopeReply
/account-adminaccount:readPrivate
/billing-adminbilling:readPrivate
/tickets-admintickets:readPrivate
/ticket<ticket-id>admintickets:readPrivate

These four look like reads, but they expose account and billing information, so each needs its own ability from the Account & billing group - account.read, billing.read or tickets.read. Of the five presets only admin includes them; moderator does not, so a trusted moderator who can restart servers and refund players still cannot see your plans and when they are paid until. billing:read is also missing from the "Discord bot" key preset, so /billing is the command most likely to fail on a freshly made key.

Economy - player commands

CommandOptionsLevelScopeReply
/balance[server-id]membereconomy:readPrivate
/daily[server-id]membereconomy:writePrivate
/shop[category] [search] [server-id]membereconomy:readPublic
/buy<server-id> <item> [quantity]membereconomy:writePrivate
/link[character] [server-id]membereconomy:writePrivate
/unlink[server-id]membereconomy:writePrivate
/my-transactions[server-id]membereconomy:readPrivate
/kits list[server-id]membereconomy:readPrivate
/kits show<server-id> <kit>membereconomy:readPrivate
/kits claim<server-id> <kit>membereconomy:writePrivate
/help-economy-None-Private

These are in the member preset 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-economy needs no ability and works before /setup has been run.

/shop and /buy suggest your own shop's categories and items as you type. quantity on /buy accepts 1 to 100.

A kit is 5 to 10 items handed over together, for a price or free, with a limit on how often each player may take it. /kits list shows every kit with its price and what YOU have left; a kit you cannot claim right now is still listed, marked, with the reason. /kits claim charges your wallet and delivers the items the same way /buy does โ€” and if the delivery fails you are refunded, in full when nothing arrived and pro rata for the items that did not when some did. Owners build kits on the panel's Economy page, under Kit Manager.

`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 CODE in game the player names their character and joins the server (leaving and joining again if already on it) โ€” the link completes when that character is seen connecting after the code was made. On every other game the option is ignored; the name is read from the !link message itself. If a game needs it and it is missing, the bot says so and no code is sent.

Economy - admin commands

CommandOptionsLevelScopeReply
/economy-setup[server-id]Setup user, server owner, or `economy.admin.earn`economy:readPrivate
/economy-config[currency-name] [server-id]Setup user, server owner, or `economy.admin.earn`economy:adminPrivate
/economy-stats[server-id]moderatoreconomy:adminPublic
/economy-links[server-id]moderatoreconomy:admin + economy:readPrivate
/economy-link-remove<user> [server-id]moderatoreconomy:read + economy:adminPublic
/economy-earn[setting] [value] [server-id]moderatoreconomy:admin + economy:readPrivate
/shop-admin<action> [item-id] [price] [category] [server-id]moderatoreconomy:admin + economy:readPublic
/award<user> <amount> [reason] [server-id]moderatoreconomy:adminPublic
/refund<transaction-id> [reason] [server-id]moderatoreconomy:adminPublic

`/economy-setup` and `/economy-config` are the economy's own settings. The person who ran /setup and the Discord server owner can always run them, and so can a role holding Configure earning (economy.admin.earn, in the moderator preset). A role holding it still needs a key with economy:admin.

/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 amount option 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

CommandOptionsLevelScopeReply
/chat-link<channel> [server-id]moderatorconsole:read + economy:readPublic
/chat-unlink-moderatorconsole:readPublic

/chat-link accepts a normal text channel only. /chat-unlink deliberately takes no options - it unlinks whatever this Discord server has bridged.

Both commands need the chat.link ability, which the bot only lets a role use while the key carries console:read. /chat-link then reads in-game chat once, which needs economy:read; running the bridge needs economy:write as well. A key with only economy:read links 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.

CommandOptionsLevelScopeReply
/preset list[server-id]memberconfig_events:readPrivate
/preset view<preset-id> [server-id]memberconfig_events:readPrivate
/preset create link[server-id]memberconfig_events:readPrivate
/preset delete<preset-id> [server-id]moderatorconfig_events:writePrivate
/preset apply<preset-id> <end> [server-id]moderatorconfig_events:write + config_events:controlPrivate
/preset library[server-id]memberconfig_events:readPrivate
/preset add<recipe> [name] [accept] [server-id]moderatorconfig_events:writePrivate
/event list[server-id]memberconfig_events:readPrivate
/event status[server-id]memberconfig_events:readPrivate
/event log<event-id> [server-id]memberconfig_events:readPrivate
/event schedule<preset-id> <start> <end> [timezone] [name] [server-id]moderatorconfig_events:writePrivate
/event update<event-id> [start] [end] [name] [server-id]moderatorconfig_events:writePrivate
/event start<event-id> [server-id]moderatorconfig_events:controlPrivate
/event end<event-id> [server-id]moderatorconfig_events:controlPrivate
/event cancel<event-id> [server-id]moderatorconfig_events:write + config_events:controlPrivate

/preset create link returns the panel URL for building a preset - presets are created in the panel, not in Discord. It makes no API call, but like every /preset and /event subcommand it first checks that you hold events.read.

/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. A running server restarts twice - now, to apply the preset, and again at the end to put your settings back. A stopped server is not started: its settings are written now and put back at the end (it restarts then only if it is running by then). The reply says which case applies, or both when it cannot read the server's state. It also says where players are warned before each restart: in game and in your alert channel, or, for a game that has no in-game broadcast, in your alert channel only (set it with /config alert-channel).

/preset library lists the ready-made presets for your server's game - for some games their own presets (Enshrouded's Relaxed, Hard and Survival, for example) and themed ones - and says if one does not fit your server and why. /preset add copies one into your saved presets, where /preset apply and /event schedule can use it. A preset under which players can lose things (dropping everything on death, losing health when starving) needs accept:true, and the reply says what you accepted.

Every `/preset` and `/event` reply is private, refusals included. The permission check runs before the server is resolved, so a member without events.read learns nothing about your servers from the error. /event cancel needs events.write in Discord and config_events:control on the key, because the API treats cancelling as control.

/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.

CommandOptionsAccess LevelAPI ScopeVisibility
/command-schedule list[server-id]membercommand_schedules:readPrivate
/command-schedule catalog[server-id]membercommand_schedules:readPrivate
/command-schedule show<schedule-id> [server-id]membercommand_schedules:readPrivate
/command-schedule create<name> <command> <cron> [params] [timezone] [server-id]operatorcommand_schedules:writePrivate
/command-schedule edit<schedule-id> [name] [command] [cron] [params] [timezone] [server-id]operatorcommand_schedules:writePrivate
/command-schedule delete<schedule-id> [server-id]operatorcommand_schedules:writePrivate
/command-schedule toggle<schedule-id> [server-id]operatorcommand_schedules:writePrivate
/command-schedule run<schedule-id> [server-id]operatorcommand_schedules:controlPrivate
/command-schedule history<schedule-id> [server-id]membercommand_schedules:readPrivate

Every `/command-schedule` reply is private, including the read-only ones. A schedule and its output can carry admin passwords, so nothing from this command is posted into the channel (player IP addresses are masked as [ip-hidden] everywhere, the bot included) โ€” the same rule /console and /command follow.

The command option takes a command ID from your game's own catalog. Catalogues differ: saveworld is 7 Days to Die's, Minecraft has say and weather, Valheim has save and broadcast. Use /command-schedule catalog to see what your server accepts, and custom for anything the catalogue does not list.

The cron option takes a 5-field cron expression, read in the `timezone` you pass and in UTC only if you pass none (e.g. 0 4 * * * for daily at 4 AM, 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 New York time. saveworld is 7 Days to Die's id; on Valheim the same job is command:save.
  • /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.

Permissions (/permissions)

Binds bot abilities to your own Discord roles. Every subcommand that names a role uses Discord's own role picker, so you choose from the roles you actually made and never type a role ID. All reply privately.

/permissions me and /permissions catalogue are open to everyone. The rest need the Discord server owner, the person who ran /setup (while they still hold Manage Server), or the bot.permissions.manage ability. Someone who has only bot.permissions.manage can give or take away only abilities they hold themselves, and never bot.permissions.manage itself; the bot lists the ones they lack and points them at the server owner.

CommandOptionsLevelDoes
/permissions me-NoneEverything you personally can do here
/permissions catalogue-NoneEvery ability that can be granted
/permissions list-Owner, setup user or bot.permissions.manageEvery Discord role and what it can do
/permissions role<role>Owner, setup user or bot.permissions.manageOne role, in full
/permissions grant<role> <capability>Owner, setup user or bot.permissions.manageLets a role do one more thing
/permissions revoke<role> <capability>Owner, setup user or bot.permissions.manageStops a role doing one thing
/permissions preset<role> <preset>Owner, setup user or bot.permissions.manageApplies a ready-made set you can then adjust
/permissions clear<role>Owner, setup user or bot.permissions.manageTakes every ability away from a role
/permissions key-Owner, setup user or bot.permissions.manageWhat your API key allows, and what it therefore blocks
/permissions refresh-key-Owner, setup user or bot.permissions.manageRe-reads what your API key allows

The capability option is autocompleted: start typing restart, shop or backup and pick from the list. A destructive ability is marked in the picker before you click it.

A Discord role can only grant a subset of what your API key already allows - never a superset. If your key lacks a scope, no role reaches past it. /permissions key shows the gap.

Setup and configuration

/setup needs Discord's Manage Server permission the first time, and re-linking is limited to the person who ran `/setup` and the Discord server owner, and the person who ran /setup counts only while they still hold Manage Server. The same two people can run every /config subcommand, and every /config change is recorded in your log channel. /config view and /config role are also open to a role holding Manage bot permissions (bot.permissions.manage), the ability that runs /permissions; the channel settings and /config reset are not. All reply privately.

CommandOptionsSets
/setup<api-key>Links your API key. Re-linking is limited to the original setup user or server owner
/config view-Shows the default server, the log, command and alert channels, who set the bot up and when, and every channel binding. For what each role can do, use /permissions list
/config role<role> <level>Applies one of the five original tiers to a role, as a preset. /permissions is the per-ability door
/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, and the Event Manager's restart warnings, 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. Players' chat lines are not mirrored unless the bot's key may read chat (player_metrics:chat)
/config live-logs<channel> [server-id]Mirrors log output into a channel. Needs logs:read. Players' chat lines are not mirrored unless the bot's key may read chat (player_metrics:chat)
/config live-stop<channel>Stops mirroring in that channel
/config summary-channel<channel> [schedule] [time] [servers]A daily or weekly server summary with chart images, at a time in /config timezone. Needs metrics:read. schedule: Off stops it
/config killfeed-channel[channel]Posts every kill as it happens (on a game with no kills, every death), up to 10 lines a message. Nothing is posted until the server's owner switches on Post every kill to a Discord channel in Metrics, Settings, Player access. Players hidden from public leaderboards are posted as "A player". Needs player_metrics:read. Leave channel empty to stop
/config moderation-channel[channel] [alt-alerts]Posts an alert when a player On Watch connects (for watches set to tell Discord, as /metrics watch add does). With alt-alerts: true it also posts new possible alternative accounts, by name and reason, once the server's A new possible alternative account is found alert is on in Metrics, Settings, Alerts, and only when the bot's API key has player_metrics:alts and belongs to the account owner or an administrator (a key without it receives none). A new channel starts from now; nothing earlier is posted. Never an address. Needs player_metrics:read. Leave channel empty to stop
/config live-list-Lists active mirrors
/config reset-Clears all bot configuration for this Discord server, after confirmation

A `/setup` re-link with a key from a different GameGrid account clears every role grant, channel binding and live mirror. A key from the same account (the same key again, or a new key you made on the account that is already linked) keeps all three. If the bot cannot tell which account the new key belongs to, it clears them. The reply says which happened, so if you are not sure, run /permissions list, /config view and /config live-list first so you can put them back. Your log, alert and command channels and default server survive either way.

Help

/help is a section per subcommand. It used to be one reply listing every command at once, which grew past the size Discord will accept for a single message and stopped answering at all; each section now has room to say what its commands are for and which ability each one needs.

CommandShowsLevelReply
/help overviewEvery section below, one line each, plus what you can do in this Discord serverNonePrivate
/help setupLinking your API key, the default server, the timezone, /config view and /config resetNonePrivate
/help servers/servers, /server, /status, start / stop / restart, updates, auto-restartNonePrivate
/help consoleReading the console, running one command, and the whole of /command-scheduleNonePrivate
/help settings/settings and the Windrose Plus mod layerNonePrivate
/help files/files, the /mods marketplace commands, and /playersNonePrivate
/help backupsTaking, listing, restoring and deleting backupsNonePrivate
/help eventsConfig presets and scheduled in-game eventsNonePrivate
/help mapThe live map: positions, regions, the leaderboard and public linksNonePrivate
/help roles/permissions, and how abilities attach to your own Discord rolesNonePrivate
/help channelsChannel bindings, log and alert channels, live mirroring, the chat bridgeNonePrivate
/help economyWallets, the shop, kits, player links and the economy admin toolsNonePrivate
/help account/account, /billing, /tickets and /ticketNonePrivate
/help metrics/metrics: server statistics, player statistics, moderation (possible alternative accounts, On Watch) and stats seasonsNonePrivate
/help leaderboard/leaderboard: asking for a board, setting boards up and posting them, summariesNonePrivate
/help my/my: your own statistics, hiding from leaderboards, your personal API tokenNonePrivate
/help-economyThe same content as /help economy, as a top-level commandNonePrivate

Typing /help on its own opens Discord's own picker for the sections - Discord does not run a command that has subcommands without one, so /help overview is the index. /help-economy is kept because it has been published for as long as the economy has; it renders the /help economy section, so the two cannot drift apart.

/help overview also shows the caller how many abilities they hold and where, which makes it the quickest way to answer "why can't I do this". /permissions me gives the full list. Every /help section and /help-economy are exempt from the cooldown and the concurrency limit, so they always answer.

When a command is refused

Two different systems can refuse a command, and the message tells you which.

Message mentionsGateFix
An ability - "You need Restart a server (server.restart)"Your Discord roles/permissions grant, or ask an admin
A scope - "it needs the servers:lifecycle API scope"The API keyCreate a new key in the panel with that scope and re-run /setup. No Discord role can fix this
No server specifiedNeither/servers, then /config default-server or /config channel-server
The server does not support thisNeitherThe game does not have that feature. /status names the game
The command is unavailable for your accountNeitherThe capability is turned off for your account - contact support

The two gates are not symmetrical. Your Discord roles hand out a subset of what your API key allows; the key is the ceiling. When an ability is blocked by both, the bot names the key, because granting the role would change nothing. See Discord Bot Permissions & Security.