Linking Discord Accounts to In-Game Players
How /link and !link connect a Discord account to a character, what each game needs before it can see the code, and what to do when nothing happens.
Why a link is needed
A purchase is made by a Discord account and delivered to a character in a game. Nothing connects those two until somebody proves they are the same person, and that proof is the link.
Linking also creates the player's wallet. Before they link they have no balance, they will not appear in the Wallets tab of the Economy Manager, and /buy refuses them outright.
A link also unlocks /my, a player's own statistics in Discord, on servers where the owner switched player self-service on (Player Self-Service). Unlinking, or linking a different character, stops the player's personal API token.
A link is stored per server. A player who plays on two of your servers links on each of them โ unless those servers share one economy, in which case one link covers every server in the group that runs the same game. See Sharing One Economy Across Servers.
The flow, in five lines
On Windrose it is different, because Windrose has no in-game chat the platform can read. The player names their character on
/linkand then joins the server after asking for the code; there is nothing to type in game. Skip to *Windrose: name your character instead* below.
1. The player runs /link in your Discord server.
2. The bot sends them a seven-character code by direct message. If their DMs are closed it shows the code in a private reply in the channel instead.
3. Within ten minutes, while connected to the game server, they type !link followed by that code in the game's chat.
4. The platform sees the message, matches the code, and writes the link.
5. The link is made and their wallet exists from that moment โ but nothing announces it. The player confirms it worked by running /balance.
`/link` on its own links nothing. It only issues a code. This is where almost everyone gets stuck: a code that is never typed in game expires quietly after ten minutes with no error anywhere to explain it.
Getting the !link message right
The whole chat message has to be !link then a space then the code, and nothing else. !link A1B2C3D please does not match. Neither does a code pasted on its own without !link in front of it.
Capital letters do not matter โ the code is read case-insensitively and stored upper-cased.
It has to be typed in the game's own chat, on the server, by the character being linked. It cannot be typed into a Discord channel, the panel console, or a bridged chat channel.
A code is good for ten minutes and for one use. If it expires, run /link again; the new code replaces the old one.
What each game needs before it can see the message
| Game | What it needs |
|---|---|
| 7 Days to Die | The platform reads chat off the server's Telnet console and opens that connection on demand. Telnet must be enabled in the server's settings; if it is not, nothing sees the message. |
| Minecraft (all five types) | Chat only exists in the server log, so the platform tails it. The server must have been started at least once for the log to exist. Nothing is installed in your server and no restart is needed. |
| Palworld | The platform reads chat out of the server logs, which PalDefender writes there. UE4SS and PalDefender must be installed (Game Tools โ UE4SS) and the server restarted, or there is no chat in the log to read. |
| Valheim | The GameGrid Bridge plugin sees chat inside the server process. It is installed automatically on every start, so a server that has been started since it was created already has it. |
| DayZ | The GameGrid DayZ server mod records the chat the server sees, and the platform picks !link out of it. The platform installs and loads the mod on every DayZ server, so players and owners install nothing for it; the server just has to be running. |
| Enshrouded | The GameGrid server module names the player who typed each chat line, and the platform picks !link out of it. Text chat has to be on (Settings, Basic). The typed code is the only proof: naming a character on /link, or being connected as that character, links nobody. See Linking Discord Accounts to Enshrouded Players. |
| Windrose | Nothing โ because there is no message to see. Windrose exposes no chat the platform can read, so it uses the character-name flow below instead. |
A game that is not in this table says how its players link in its own section of the knowledge base.
On every game except Windrose, the message has to be seen while the player is connected and the server is running. There is no way to link from outside the game except a manual link.
Windrose: name your character instead
Windrose Plus can tell the platform exactly who is connected, but it cannot read chat and the game has no console we can type into. So the proof runs the other way round: the player says which character they are, and the platform confirms it by seeing that character connect to the server after the code was made.
1. The player runs /link and fills in the character option with their exact in-game character name.
2. The bot DMs them a code, as usual, and tells them to join the server rather than to type anything.
3. They join within ten minutes, as that character. A player who is already on the server when they run /link leaves and joins again: the platform links a character only after it has seen that name not connected since the code was made, then connected.
4. The platform sees them appear on the connected-player list and completes the link.
If they leave the character name out, the bot refuses and sends no code โ a code with no character to match against would simply expire.
The name must match what the server shows. Capitalisation does not matter and stray spaces are trimmed, but a different spelling will not match; the link is stored with the spelling the server uses, not the one they typed.
This confirms someone connected as that character after the code was made. It does not prove the Discord account belongs to the person at the keyboard โ it is the strongest confirmation Windrose allows. Someone who joins under the name in the minutes after a code is made would be linked to that code, so on a server where that matters, link the player by hand instead.
Windrose Plus has to be installed for any of this, because it is what publishes the player list. See Windrose Economy and Shop.
Valheim: chat with one player online
Valheim sends a chat message to the *other* players on the server. With one player online it sends nothing at all, so there is no message for the bridge to see and !link cannot work.
The platform works around this with a setting called Capture Chat With One Player Online, in Settings under the Game Tools category. It is on by default. It adds a single clearly-named entry, "GameGrid (chat relay)", to the in-game player list so a lone player's message has somewhere to go. It shares no position, is never drawn on a map, and steps aside as soon as a second player connects.
Changing it either way needs a restart before it takes effect.
If you turn it off, chat capture and in-game linking need two players online.
What the link stores
Each link keeps the Discord user, the in-game character name, and the game's own id for that player. The Links tab shows all three.
The id differs by game, and it matters when a link stops working.
- 7 Days to Die stores the Steam id where it can, falling back to the entity id.
- Minecraft stores the Mojang UUID, which never changes even when the account name does.
- Palworld stores the platform id, such as
steam_7656โฆ. - DayZ stores the player's Steam id, falling back to the game's own player id; both stay the same across sessions.
- Valheim uses a per-session number that changes every time the player reconnects โ the platform re-finds them by character name when that happens and quietly updates the stored id.
A link is per Discord user per server: one Discord account cannot hold two links on the same server. Removing the old one first is how a player switches characters.
Linking a player by hand
On the Economy Manager's Links tab, + Add Manually links a Discord user to a character without a code. You need the Discord user ID (not the username โ turn on Developer Mode in Discord, right-click the user, Copy User ID) and the in-game name exactly as it appears in game.
The field labelled In-Game Entity ID is optional despite its name, and it takes whichever id your game uses for that player โ the Steam id, the Mojang UUID, the Palworld platform id. Fill it in if you know one; delivery uses the id first and falls back to the name, so leaving it blank still works.
Use this for a player who cannot get the in-game step to work, and to fix a link made against the wrong character. It creates a verified link and a wallet.
A hand-made link covers only the server you made it on. On a shared economy, make one on each server the player uses, or have them run the code flow once instead.
Removing and re-linking
A player removes their own link with /unlink. You remove anybody's from the Links tab with the Remove button, or with /economy-link-remove <user> in Discord (the economy.admin.links ability, in the moderator preset).
Removing a link does not touch the wallet or its balance โ the same Discord account gets its balance back when it links again.
A player who changes their character name should re-link on the games where the name is what delivery uses. On Minecraft the stored UUID keeps working through a name change, but the stored name is what the give command receives, so re-linking after a rename is still the safe move.
When nothing happens
Nothing at all happens after !link, and that is by design โ the game gives the player no feedback either way, and neither does the bot. Work through these in order.
1. Is the player actually on the server, in that game's chat, with the server running? A code typed while disconnected reaches nobody.
2. Was the message exactly !link CODE? Extra words break the match.
3. Was it inside ten minutes? Run /link again and try immediately.
4. Has it in fact worked? Ask them to run /balance. A link that succeeded looks identical to one that failed until something reads the wallet.
5. Does that game's chat path work at all? Check the Chat tab on the Game Tools page if your game has one, or link a Discord channel with /chat-link and see whether in-game chat appears in it. If the platform cannot see ordinary chat, it cannot see !link either โ and that is the fault to fix.
6. Per game: is PalDefender installed and has the Palworld server been restarted since? Has the Valheim server been started at least once since it was created? Has the Minecraft server ever been started? Is Telnet enabled in the 7 Days to Die server's Settings? Is the DayZ server running?
If it still will not take, link the player by hand from the Links tab and move on.