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 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 joins the server; 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. |
| 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. |
On the first four, 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 on the server.
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.
4. The platform sees them 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 is playing that character right now. It does not prove the Discord account belongs to the person at the keyboard — it is the strongest confirmation Windrose allows, and it is the same check an admin would make by eye. 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…. - 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 (Full Access).
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 for Palworld and Valheim, 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?
If it still will not take, link the player by hand from the Links tab and move on.
