Skip to main content

Discord Chat Bridge

Mirror in-game chat into a Discord channel and send that channel's messages back into the game. Setup, what each game can do, and the limits.

What it does

The chat bridge connects one Discord channel to one server's in-game chat, in both directions. What players say in game appears in the channel; what people type in the channel appears in game.

It is available on 7 Days to Die, DayZ, Minecraft, Palworld and Valheim. Windrose has no in-game chat the platform can read, so it has no bridge. It is part of the same connection the economy uses, but you can run it without ever setting up a shop.

It needs the GameGrid Discord bot in your Discord server. A game without a Game Tools page has no panel screen for reading or sending chat. On a game with one, chat is a tab of Game Tools: on DayZ it shows chat and can send a message to everyone in game, and on the others it is read-only.

Setting it up

Run /chat-link #channel in your Discord server. It needs the chat.link ability (in the moderator preset), and the bot only lets a role use that while your API key carries console:read; without it the bot refuses and names that scope. That is the whole setup.

The command checks before it promises anything. If the game has no chat the platform can read, it refuses outright. If your API key cannot read chat it says so and what the key needs. If the server is simply not answering, it saves the link and warns you that nothing will appear until it does.

The bridge needs a key that may read chat. Chat text is the server owner's and administrators' only (since 8 October 2026 this holds for the Customer API's live chat too): the bot's API key needs the player_metrics:chat scope ("Read stored chat") as well as economy:read, and it must have been created by the account owner or an administrator. The Discord bot preset leaves player_metrics:chat out on purpose, so tick it when you create the key and re-run /setup. Without it /chat-link is refused and an existing link pauses with the same explanation.

The check it runs is a read, so it only proves economy:read. A key that has economy:read but not economy:write links successfully and then cannot speak into the game. If messages flow one way only, check that scope before anything else.

One link per Discord server. Running /chat-link again replaces whatever was linked before, whichever channel and server that was. /chat-unlink removes it.

The Discord-to-game direction also depends on the Message Content intent, which Discord grants to the GameGrid bot as a whole rather than per server โ€” so it is not something you configure, and your channel permissions do not affect it. If in-game chat reaches Discord but your messages never reach the game and your key does carry economy:write, raise that direction with support: the game-to-Discord half working tells you the link itself is fine.

What it looks like

A message from the game arrives in Discord as the player's name in bold followed by what they said.

A message from Discord arrives in game prefixed [Discord] and the sender's Discord username โ€” for example, [Discord] alice: anyone near the trader?. That prefix is not decoration: it is how the platform recognises its own messages and stops a game that echoes chat back from looping the same line round forever.

The bot polls for new in-game messages every five seconds, so expect up to a five-second delay in that direction. Discord to game is immediate.

A poll carries at most ten messages into the channel. If more than ten were said in those five seconds, the newest ten are posted and one further line says how many were skipped โ€” those are not delivered later. On a very busy server the channel is a sample of chat rather than a complete transcript.

Where each game's chat comes from

Each game gives up its chat differently, which is why what you have to set up differs too.

GameChat is read fromWhat it needsMessages from Discord arrive as
7 Days to DieThe server's Telnet console, connected on demandTelnet enabled in SettingsThe game's say command
Minecraft (all five types)The server log, the only place Minecraft chat existsNothing installed, no restart โ€” the server just has to have been started oncesay
PalworldThe server logs, where PalDefender writes chatUE4SS and PalDefender installed, and a restartA server announcement, through Palworld's own announce API
ValheimThe GameGrid Bridge plugin, which sees chat inside the server processNothing โ€” the plugin installs itself on every server startA shout every player sees, from the server rather than from a player
DayZThe GameGrid DayZ server mod's record of chat, or the server's BattlEye RCon chat feed until the mod has recorded anyNothing โ€” the platform installs and loads the mod on every DayZ serverAn on-screen notice and a chat line from the mod, or a BattlEye server message when the mod cannot show it

The same chat feed is what the platform watches for !link codes, so a chat bridge that works is a good sign that account linking will too โ€” and one that does not is the first thing to fix when linking fails.

Valheim: chat needs somebody to talk to

Valheim does not broadcast chat. It sends each message to the other players on the server, so with one player online nothing is transmitted at all and the bridge has nothing to forward.

The Capture Chat With One Player Online setting, in Settings under the Game Tools category and on by default, fixes this by adding one entry called "GameGrid (chat relay)" to the in-game player list, so a lone player's message has a recipient. It holds no position, is never drawn on any map, and steps aside as soon as a second player connects.

Changing it takes effect from the next restart of the server.

If you turn it off, accept that chat capture and in-game linking then need two players online.

Limits worth knowing

Colours and formatting are not carried in either direction. Discord markdown is not converted to in-game formatting, and in-game colour codes do not survive the trip. A player cannot format the line with their name either, and nothing typed in game can ping your Discord โ€” an @everyone said in chat arrives as plain text.

The platform keeps only a short buffer of recent in-game chat. If the bridge is down for a long time, the messages from that period are gone rather than delivered late.

Messages from Discord are cleaned before they are sent โ€” control characters removed and length capped โ€” so a long Discord message can arrive shortened. This is a safety measure: on a game where chat is delivered as a console command, a raw newline could otherwise end that command and start a new one on your server. How much shortening you see depends on the game.

The only thing filtered out is the bridge's own echo: a line the bridge already posted into the game is not sent back to Discord. System lines and server messages are not filtered โ€” if the game writes them into chat, they are forwarded like anything else.

The bridge posts what your Discord members type into public game chat. Treat the linked channel as public.

If you have Discord activity rewards switched on for your economy, the linked channel is the only channel they count in. That is deliberate โ€” the bot reads no other channel โ€” and it makes the reward "coins for talking in the server's channel" rather than "coins for talking anywhere". The amount, the daily cap and the cooldown are set on the panel's Economy page.

The webhook alternative

There is a second way to get in-game chat into Discord that does not use the GameGrid bot at all: the platform can post to a Discord webhook itself. It is configured through the Customer API, not from the panel:

GET /servers/<id>/economy/chat/bridge
PUT /servers/<id>/economy/chat/bridge

Both need the economy:admin scope.

It is one-way โ€” game to Discord โ€” and it exists for communities that do not want to invite another bot.

Do not point both at the same channel. The webhook bridge and /chat-link are alternatives, and running both posts every message twice.

The webhook URL is write-only: reading the setting back tells you whether one is configured, never what it is.

If Discord refuses a post (a rate limit or an outage), the platform keeps its place and tries the same message again at its next check, 15 seconds later. It gives up on a message only after about five minutes in which nothing at all could be posted, and then skips just that one message and carries on with the rest. A webhook you have deleted refuses every post, so set a new one with PUT as above.

When the channel stays empty

Is the server running, and is anybody actually talking? An empty channel on an empty server is correct.

Run /chat-link again on the same channel. It re-checks the server and tells you what it found โ€” that answer alone usually names the problem.

Check what your game needs, from the table above: PalDefender installed and a restart since, for Palworld; Telnet enabled in Settings, for 7 Days to Die; at least one start, for Minecraft; at least one start, for Valheim, whose plugin installs itself when the server starts; a running server, for DayZ.

Valheim with one player online: see the section above.

If the channel was deleted or the bot lost permission to post in it, the bridge backs off for five minutes and then tries again. Restoring the permission is enough on its own; re-running /chat-link just makes it resume immediately.

If the game has no chat the platform can read at all, /chat-link refuses instead of linking. That is the answer, not a fault.