Skip to main content

Get your Discord bot working: start to finish

Invite the bot, connect it to your server, give your staff access, and run your first command — in order, with what to check if a step does not work.

What you get, and what it costs

The GameGrid bot puts your game server inside your own Discord. Your staff can start, stop and restart it, read the console, run commands, take and restore backups, edit settings, install mods and manage players without opening the panel. Your players can check whether it is up, and — on the games that support it — link their account, earn currency and buy items.

It is included. There is nothing to buy and no separate plan.

Five minutes, four steps. Invite the bot, run /setup with an API key, give your roles access, then run /servers. Everything else is optional.

You need: Manage Server on the Discord side, and access to your GameGrid panel to create an API key. If you own the Discord server you already have the first.

Step 1 — Invite the bot

Open Discord Bot in the panel sidebar and use the invite link there. It carries the exact permissions the bot needs and nothing more.

Pick the Discord server you want it in. Discord will show you the permission list — approve it.

The bot appears offline until step 2. That is expected: it has joined, but it does not yet know which GameGrid account it is acting for.

If the invite link does nothing: you are probably not an administrator of that Discord server, or you are signed into a different Discord account in your browser than in your app. Discord only offers servers where you hold Manage Server.

Step 2 — Create an API key, then run /setup

The bot talks to your servers through the Customer API, so it needs a key of your own. That is what keeps it able to touch your servers and nobody else's.

In the panel: Account → API Keys → Create key. Give it a name you will recognise later, such as "Discord bot". Copy the key — it is shown once and cannot be retrieved afterwards.

Which scopes. The picker groups them, and the group names below are the ones on the form. For the whole command set, tick: Servers, Console & logs, Files & mods, Settings, Players, Backups, Scheduled events, Command schedules, Economy, Live map, In-game, Player data, Support, Account & billing, and Advanced for windrose:admin if you run Windrose. In-game is what /dayz players, /dayz killfeed and /dayz broadcast use. Player data is what /metrics top, /metrics player and /metrics sessions use; starting a new stats season with /metrics new-season also needs metrics:admin under Servers, which you tick yourself.

Command schedules is the one people miss. Without it /command-schedule cannot list, create or run anything, and that is the whole Command Manager from Discord — see Scheduling Commands from Discord.

The two easy mistakes: Servers is what allows start, stop and restart — a key without it lists your servers and cannot control them. And Backups covers taking *and* restoring, so leave it off if you do not want that reachable from Discord.

A key with fewer scopes is perfectly fine. Commands it cannot reach reply saying which scope is missing rather than failing silently, so you can start narrow and widen later.

In Discord: run /setup api-key:<your key>. Run it in the Discord server, not in a DM.

Discord hides the value as you type it and the bot's reply is only visible to you. The key is stored encrypted against your Discord server.

If /setup says the key is invalid: the most common cause is a partial copy — keys are long. Create a fresh one rather than trying to repair it.

Step 3 — Decide who can do what

Out of the box only the person who ran /setup and the Discord server owner can do anything. Nobody else can even list your servers. Open it up deliberately.

Access is granted per Discord role, one ability at a time, to the roles you already made — @Verified, @Admin, @Minecraft Player, whatever you called them. You pick the role from Discord's own role picker; you never type a role ID.

There are five presets to start from, each including everything below it:

`nothing` — cannot use the bot at all. The default for every role.

`member` — view servers, status, players, settings, logs, files, mods, events, schedules, the live map and the backup list. Changes nothing on the server. Also what your players need for /balance, /shop, /buy, /kits, /link and /daily.

`operator` — member, plus reading the console, running console commands, managing scheduled commands and putting a message on every player's screen.

`moderator` — everything operational: start, stop, restart, settings, mods, backups and restores, events, Windrose Plus, the chat bridge, and economy administration.

`admin` — moderator, plus the commands that expose your own account rather than your servers (/account, /billing, /tickets, /ticket), and managing bot permissions.

Apply one with /permissions preset role:@Moderators preset:operator.

A preset is a starting point, not a ceiling. Adjust it one ability at a time — /permissions grant role:@Helpers capability:server.restart then /permissions revoke role:@Helpers capability:settings.write gives you a role that can bounce a stuck server and cannot change its difficulty. That is the thing a single access level could never say.

A sensible starting point: your members role on member so players can check status and use the shop; moderators on operator; a small admin role on moderator; and admin only for yourself.

A member holding several roles gets the union of what they grant. Someone who is @Verified and @Minecraft Player and @Regular can do everything any of those three allows. A role never takes away what another gave, and the order your roles sit in on Discord makes no difference here.

`@everyone` is special. Every current and future member holds it, so the bot refuses to give it anything destructive or anything that shows your billing, and a preset applied to it is filtered down to the safe part with the difference named.

Anyone can run /help, or /permissions me for the full list of what they hold. Every refusal names the ability required and who can grant it, so a member who hits one can ask the right person instead of guessing.

One limit is worth knowing before you start: a Discord role can only grant a subset of what your GameGrid API key already allows, never more. If your key was minted without servers:lifecycle, nobody restarts a server through this bot, whatever role you give them. /permissions key shows you the gap.

Read Discord Bot Permissions before granting the moderator preset — it can restore a backup over a live world and award currency.

Step 4 — Run your first command

/servers lists your servers with their service numbers. If you see them, everything above worked.

Your Account page in the panel also lists the Discord servers the bot is linked in.

Then /status for a health summary, or /server server-id:00000044 for one server in detail.

You can address a server three ways, and it is worth setting one up now so nobody types an ID again:

/config default-server server-id:00000044 — every command in this Discord server defaults to it. Best if you run one server.

/config channel-server channel:#smp-controls server-id:00000044 — commands in that channel act on that server. Best if you run several: give each its own channel and the IDs disappear.

Or pass server-id: explicitly, which always overrides the other two.

Service numbers can be typed short. /server server-id:44 is the same as 00000044.

Worth setting up next

A log channel — /config log-channel channel:#bot-log. Every action taken through the bot is recorded there with who did it. If more than one person has access, set this up.

A command channel — /config command-channel channel:#server-controls restricts /command (sending a console command) to that one channel. Every other command still works anywhere.

An alert channel — /config alert-channel channel:#alerts posts a notice when a server starts, stops or crashes, and the restart warnings a config event sends players before it restarts a server.

Live console — /config live-console channel:#console streams the game console into a channel. Passwords and player IP addresses are removed before anything is posted.

Chat bridge — /chat-link mirrors in-game chat into a Discord channel and back. Available on the games with a chat interface: see Chat Bridge.

The economy — currency, a shop and rewards for playing. Start at Economy Overview. What it can do depends on your game, and that article says exactly which.

If something is not working

"This interaction failed" — Discord gives a bot three seconds to acknowledge a command. A slow first call can miss it. Run the command again; if it happens repeatedly, check the platform status page.

"Not set up. Run /setup first." — the bot has no API key for this Discord server. Someone may have run /config reset, or the bot was removed and re-invited.

"You need Restart a server (`server.restart`) to do that" — expected. Someone with /permissions has to grant that ability. The message names it, and names what you do hold.

"It needs the `servers:lifecycle` API scope, and the key linked here does not carry it" — a different problem. No Discord role fixes this one: mint a key with that scope and re-run /setup.

"No server specified." — no default and no channel binding. Add server-id:, or set one of the two up as in step 4.

A command is missing from the picker — Discord caches the command list per server and can take a few minutes after the bot joins. Fully restart your Discord client if it persists.

The bot shows offline but commands work — harmless. Discord shows presence per shard and the bot does not set a custom status.

Still stuck? Open a ticket from the panel's Support page and say which step you reached. /tickets and /ticket in Discord read your tickets; they cannot open one.