Scheduling Commands from Discord
Use /command-schedule to create, list, run and audit scheduled game-server commands from Discord, with copy-paste examples for Minecraft, 7 Days to Die, Palworld, Valheim and Windrose.
What /command-schedule does
/command-schedule puts the Command Manager in your Discord server. Same schedules, same execution engine, same audit trail as the panel - you are looking at one thing through two windows.
You need the bot linked to your GameGrid account first. See Discord Bot Setup if you have not connected it.
Every reply is ephemeral - only you see it. Scheduled commands and their output can carry admin passwords and player IP addresses, so nothing from this command is posted into the channel.
You usually do not need the server ID
Every subcommand takes an optional server-id. Leave it blank and the bot uses the server bound to the channel you are typing in.
/command-schedule listIf the channel is not bound to a server, or you want a different one, start typing in server-id and the bot autocompletes from the servers you actually have.
/command-schedule list server-id: Community SurvivalBinding a channel to a server is the setting that makes this whole command comfortable to use. It is covered in Discord Bot Setup.
The nine subcommands
| Subcommand | Does | Needs |
|---|---|---|
list | Every schedule on the server, with its next run | Read Only |
catalog | The commands this game supports | Read Only |
show | One schedule in full | Read Only |
history | The last 10 executions of one schedule | Read Only |
create | Make a new schedule | Console |
edit | Change an existing one | Console |
toggle | Turn one on or off | Console |
run | Fire one immediately | Console |
delete | Remove one permanently | Console |
Those two Discord roles map to the same API scopes the panel uses: command_schedules:read for the reads, command_schedules:write for create, edit, delete and toggle, and command_schedules:control for run.
Start with `catalog`. It is the authoritative list of command IDs for the
command:option, and it reports how many commands the game has. Guessing a command ID is the most common way acreatefails.
Creating a schedule
create takes a name, a command ID, and a cron expression. Parameters and timezone are optional.
/command-schedule create
name: Hourly Save
command: saveworld
cron: 0 * * * *A command that takes parameters gets them as JSON in params:
/command-schedule create
name: Daily Notice
command: say
cron: 0 12 * * *
params: {"message":"Happy hunting!"}| Option | Required | Notes |
|---|---|---|
name | Yes | What you will see in list |
command | Yes | A command ID from catalog |
cron | Yes | 5-field cron expression |
params | No | JSON object of that command's parameters |
timezone | No | IANA name. Defaults to UTC, not to your panel profile |
server-id | No | Blank uses this channel's server |
The timezone default catches people out. The Discord command does not pick up the timezone on your GameGrid profile, so if you think in local time, pass
timezone:explicitly.
What you can and cannot set from here
| Setting | From Discord | From the panel or API |
|---|---|---|
| Name, command, cron, params, timezone | Yes | Yes |
| Multi-step sequences and per-step waits | No | Yes |
| Send to every online player expansion | No | Yes |
| Run conditions and minimum player count | No | Yes |
| Failure alerts | No | Yes |
| Overlap policy, catch-up window, start spread, missed-run tolerance | No | Yes |
A schedule created from Discord is not missing those settings - it takes their defaults. It runs on schedule regardless of server state, skips an occurrence if the previous run is still going, will still fire up to 15 minutes late, does not spread its start, and is flagged late after one missed run.
Schedules built in the panel work here in full. list shows them with their next run, history numbers each step of a multi-step run, and run fires the whole sequence.
Cron in one table
Five fields: minute, hour, day-of-month, month, day-of-week.
| Expression | Fires |
|---|---|
*/5 * * * * | Every 5 minutes - the minimum allowed |
*/30 * * * * | Every 30 minutes |
0 * * * * | Every hour, on the hour |
0 */6 * * * | Every 6 hours |
0 4 * * * | Every day at 04:00 |
0 4 * * 1 | Every Monday at 04:00 |
0 21 * * 5 | Every Friday at 21:00 |
0 0 1 * * | The 1st of every month, midnight |
The expression is read in the timezone you pass on timezone:, or UTC if you pass none.
The timezone on a schedule is now actually used when it fires. Before September 2026 it was stored and never read, so every schedule ran on UTC whatever it said. If you set schedules up before then and worked around it by shifting the hour, open them in the panel and check the "next five runs" preview.
Minecraft examples
/command-schedule create name: Auto Save command: save-all cron: */30 * * * */command-schedule create name: Restart Warning command: say cron: 0 4 * * *
params: {"message":"Server restarting in 10 minutes"}/command-schedule create name: Daily Daylight command: time-set cron: 0 6 * * *
params: {"value":"day"}/command-schedule create name: Clear Skies command: weather cron: 0 * * * *
params: {"type":"clear"}/command-schedule create name: No Griefing command: gamerule cron: 0 5 * * *
params: {"rule":"mobGriefing","value":"false"}Anything the catalog does not list goes through custom:
/command-schedule create name: Player Check command: custom cron: */10 * * * *
params: {"command":"list"}Minecraft runs show as Sent, unconfirmed rather than a green tick. Its console carries no reply, so we can confirm delivery and nothing more. That is honesty, not a fault.
7 Days to Die examples
/command-schedule create name: Hourly Save command: saveworld cron: 0 * * * */command-schedule create name: Evening Airdrop command: spawnairdrop cron: 0 20 * * */command-schedule create name: Roster Log command: listplayers cron: */30 * * * */command-schedule create name: Friday Horde command: spawnwh cron: 0 21 * * 5/command-schedule create name: Coffee Round command: buffplayer cron: 0 18 * * 5
params: {"player":"172","buff":"CoffeeStaminaBoost"}| Worth knowing | Why |
|---|---|
| A scheduled horde spawns at the world centre | A schedule has no position to spawn near |
| Use an entity ID, not a name, for one player | buffplayer Bob Smith buffFoo buffs "Bob" with a buff called "Smith" |
| To buff everyone, use the panel | The Send to every online player toggle is not a Discord option |
give needs the exact item name | give 171 medicalFirstAidBandage 5 drops five bandages in front of entity 171. The item name must match the list the game itself uses - run listitems in the console - and the player must be online |
Palworld examples
/command-schedule create name: Auto Save command: save cron: */30 * * * */command-schedule create name: Restart Warning command: broadcast cron: 50 3 * * *
params: {"message":"Server restarting in 10 minutes"}/command-schedule create name: Event Alert command: pdalert cron: 0 19 * * 6
params: {"message":"Event starting now"}/command-schedule create name: Weekly Wood command: pdgiveitem cron: 0 18 * * 5
params: {"playerId":"steam_76561198000000000","itemId":"Wood","count":50}Player IDs are platform-prefixed - steam_, gdk_ or ps5_. Find them with ShowPlayers on the Console tab.
Five of Palworld's eleven commands are PalDefender commands (
pdalert,pdreloadconfig,pdgiveexp,pdgiveitem,pdgivepal) and fail if PalDefender is not installed. And if every Palworld schedule is failing, checkAdminPassword- without it there is no REST API to send anything to.
Valheim examples
/command-schedule create name: Hourly Save command: save cron: 0 * * * */command-schedule create name: Restart Warning command: broadcast cron: 0 4 * * *
params: {"message":"Server restarting in 10 minutes"}/command-schedule create name: Bridge Health command: health cron: */5 * * * */command-schedule create name: Daily Wood command: spawn cron: 0 18 * * *
params: {"player":"PlayerName","item":"Wood","quantity":10}Valheim runs through the GameGrid Bridge plugin, not RCON or telnet. The catalog is seven entries: broadcast, save, spawn, players, info, health, and a custom that accepts only those same six.
| Not available | Use instead |
|---|---|
kick, ban, unban, devcommands | The in-game F5 console, or the Player Management page |
| Server shutdown | The Stop button in the panel |
| Send to every online player, multi-step | The panel - then list, run and history work on it from here |
A Valheim world save can hold the game for up to 90 seconds on a large world, and scheduled saves are given that time. They used to be cut off at 15 seconds and recorded as errors even though they had completed.
Windrose examples
Read this first. Windrose has no broadcast, say or chat command of any kind, so no Windrose schedule can put a message in front of players. Restart warnings have to go out in Discord or in the server description.
What Windrose scheduling is good at is keeping a record:
/command-schedule create name: Hourly Status command: status cron: 0 * * * */command-schedule create name: Uptime command: uptime cron: 0 * * * */command-schedule create name: Entity Count command: entities cron: 0 */6 * * */command-schedule create name: Perf Snapshot command: perf cron: 30 */6 * * */command-schedule create name: Support Snapshot command: doctor cron: 0 5 * * 1/command-schedule create name: Version Log command: version cron: 0 5 * * 1Seven Windrose Plus commands are deliberately absent from the catalog. Each was measured against a live server:
| Command | What it actually does |
|---|---|
wp.kick, wp.ban, wp.unban, wp.listbans | Report success for players who do not exist. Nothing enforces the ban list |
wp.givestats | Audit-only by its own help text. Changes nothing in game |
wp.time, wp.weather | Return a raw object pointer rather than a value |
custom will still send them, and they will still not do what you want. See Windrose Admin Commands Reference.
Checking what happened
/command-schedule history schedule-id: 3f9c1a2bShows the last 10 executions. A multi-step run is numbered, so a five-step schedule reads as five step rows and a summary rather than six identical ones.
| Symbol | Status | Means |
|---|---|---|
| ✅ | Success | Sent, and the server replied |
| ❌ | Error | Not delivered, or rejected |
| ⏸ | Skipped | A run condition turned this occurrence away. Not a failure |
Every execution is logged wherever it was triggered from - the schedule itself, the panel, or run here. All of create, edit, delete, toggle and run are recorded in the audit log.
When something is not behaving, Command Manager Troubleshooting goes through each status and what to check.
The same schedules, elsewhere
| Where | Article |
|---|---|
| The panel, in full | Command Manager Guide |
| Your own code | Command Manager API |
The {players} style placeholders | Command Manager Variables |
| Every Discord slash command | Discord Bot Commands |
