Valheim Intermédiaire 10 min de lecture

Notifications Discord pour un serveur Valheim (code de connexion, joueurs, sans mod)

Envoyer automatiquement sur Discord le code de connexion crossplay, l'ouverture du serveur et l'arrivée des joueurs Valheim : webhook, script de lecture des logs compatible crossplay, variante Docker et mod DiscordConnector.

Notifications Discord pour un serveur Valheim (code de connexion, joueurs, sans mod)

Notifications Discord pour un serveur Valheim

Sur un serveur Valheim en crossplay, un détail empoisonne la vie des admins : le code de connexion change à chaque redémarrage. Chaque matin, quelqu’un demande « c’est quoi le code ? » sur Discord. La solution : que le serveur l’annonce lui-même, avec l’ouverture du serveur et l’arrivée des joueurs.

La bonne nouvelle, c’est que tout est déjà écrit dans les logs du serveur. Il suffit de les lire et d’envoyer les bonnes lignes à un webhook Discord — sans aucun mod, donc compatible avec le crossplay.

⚔️ Serveur Valheim crossplay

PC, PS5, Switch 2 et Xbox sur le même monde

Un serveur Valheim HebergTonServ avec crossplay activable et console en direct : dès 7,90 €/mois, Ryzen 9 5950X et support français 24/7.

Voir les offres Valheim →

Les trois méthodes

MéthodePour quiCrossplayMod requis
Script qui lit les logsServeur Linux auto-hébergé✅ OuiNon
Hooks de l’image DockerServeur dans Docker✅ OuiNon
Mod DiscordConnectorServeur moddé PC Steam❌ Non (BepInEx)Oui

Étape commune — Créer le webhook Discord

  1. Sur Discord, ouvrez les paramètres du salon où publier les annonces.
  2. Intégrations → Webhooks → Nouveau webhook.
  3. Donnez-lui un nom (« Serveur Valheim ») et copiez son URL.

Gardez cette URL secrète : toute personne qui la possède peut publier dans votre salon. Ne la collez jamais dans un canal public ni dans un dépôt Git.

Envoyer un message au webhook se fait avec une simple requête HTTP :

curl -sS -X POST -H "Content-Type: application/json" \
  -d '{"username":"Valheim","content":"Test depuis le serveur"}' \
  "https://discord.com/api/webhooks/XXXX/YYYY"

Si le message apparaît dans le salon, le webhook fonctionne.


Les lignes de log à surveiller

Tout repose sur trois lignes écrites par le serveur (détails dans lire les logs d’un serveur Valheim) :

ÉvénementLigne dans le log
Serveur prêtGame server connected
Code de connexion (crossplay)Session "…" with join code 555295 and IP … is active with N player(s)
Joueur entré dans le mondeGot character ZDOID from <nom> : …

Deux subtilités à gérer :

  • Le code de connexion : au démarrage, le serveur peut annoncer un premier code (registered with join code …) puis en créer un autre quelques secondes plus tard. Seule la ligne is active with donne le code réellement actif. Un admin a documenté en septembre 2026 exactement ce piège : son bot annonçait le premier code, qui ne marchait pas.
  • La ligne ZDOID from se répète à chaque réapparition d’un joueur, par exemple après une mort. Le script ci-dessous en tient compte.

Méthode 1 — Un script qui lit les logs (Linux)

Prérequis : le serveur écrit son log dans un fichier grâce à l’argument officiel -logFile, par exemple -logFile "/home/valheim/valheim.log".

Créez /home/valheim/valheim-discord.sh :

#!/usr/bin/env bash
# Annonce Discord à partir du log du serveur Valheim.
# Script d'exemple : adaptez les deux variables ci-dessous.

WEBHOOK="https://discord.com/api/webhooks/XXXX/YYYY"
LOG="/home/valheim/valheim.log"

send() {
  local msg="${1//\"/\\\"}"   # échappe les guillemets pour le JSON
  curl -sS -X POST -H "Content-Type: application/json" \
       -d "{\"username\":\"Valheim\",\"content\":\"$msg\"}" "$WEBHOOK" > /dev/null
}

last_code=""
declare -A last_seen   # dernière annonce par joueur (anti-doublon)

tail -n 0 -F "$LOG" | while IFS= read -r line; do
  case "$line" in
    *"Game server connected"*)
      last_code=""
      send "🟢 Le serveur Valheim est en ligne."
      ;;
    *"with join code"*"is active with"*)
      code=$(grep -oE 'join code [0-9]{6}' <<< "$line" | grep -oE '[0-9]{6}')
      if [ -n "$code" ] && [ "$code" != "$last_code" ]; then
        last_code="$code"
        send "🔑 Code de connexion : **$code**"
      fi
      ;;
    *"Got character ZDOID from "*)
      name="${line#*Got character ZDOID from }"
      name="${name%% :*}"
      now=$(date +%s)
      # n'annonce pas un même joueur deux fois en 10 minutes (morts, réapparitions)
      if [ $(( now - ${last_seen[$name]:-0} )) -gt 600 ]; then
        last_seen[$name]=$now
        send "⚔️ $name a rejoint le monde."
      fi
      ;;
  esac
done

Rendez-le exécutable et testez-le à la main :

chmod +x /home/valheim/valheim-discord.sh
/home/valheim/valheim-discord.sh

Redémarrez le serveur Valheim dans un autre terminal : l’annonce « en ligne » puis le code doivent arriver sur Discord.

Le faire tourner en permanence (systemd)

Créez /etc/systemd/system/valheim-discord.service :

[Unit]
Description=Annonces Discord du serveur Valheim
After=network-online.target

[Service]
User=valheim
ExecStart=/home/valheim/valheim-discord.sh
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now valheim-discord

Grâce à tail -F, le script continue de suivre le fichier même s’il est recréé au redémarrage du serveur.

Si votre serveur tourne sous systemd sans fichier de log

Remplacez la ligne tail -n 0 -F "$LOG" par :

journalctl -u valheim -f -n 0 -o cat

(en adaptant le nom du service du serveur Valheim).


Méthode 2 — Avec l’image Docker communautaire

L’image ghcr.io/community-valheim-tools/valheim-server sait exécuter une commande quand une ligne de log correspond à un filtre. Son README fournit l’exemple d’annonce des joueurs :

DISCORD_WEBHOOK=https://discord.com/api/webhooks/XXXX/YYYY
VALHEIM_LOG_FILTER_CONTAINS_Spawned=Got character ZDOID from
ON_VALHEIM_LOG_FILTER_CONTAINS_Spawned={ read l; l=${l//*ZDOID from /}; l=${l// :*/}; msg="Player $l spawned into the world"; curl -sfSL -X POST -H "Content-Type: application/json" -d "{\"username\":\"Valheim\",\"content\":\"$msg\"}" "$DISCORD_WEBHOOK"; }

L’image propose aussi des hooks d’événements, par exemple pour prévenir avant un redémarrage automatique :

DISCORD_MESSAGE=Redémarrage du serveur Valheim dans une minute !
PRE_RESTART_HOOK=curl -sfSL -X POST -H "Content-Type: application/json" -d "{\"username\":\"Valheim\",\"content\":\"$DISCORD_MESSAGE\"}" "$DISCORD_WEBHOOK" && sleep 60

C’est la seule façon simple de prévenir les joueurs : le jeu n’a aucune annonce native avant un redémarrage.

Les guillemets se comportent différemment en ligne de commande, dans un docker-compose.yaml et dans un fichier .env. Le README de l’image donne un exemple pour chaque cas : suivez celui qui correspond à votre installation. Installation complète : serveur Valheim avec Docker.

Pour le code de connexion, vous pouvez poser un filtre sur is active with. Attention : chaque déclenchement du hook est un processus séparé, qui ne se souvient pas du code précédent. Pour ne pas republier le même code à chaque ligne de session, le hook doit mémoriser le dernier code annoncé dans un petit fichier (par exemple sous /config) et ne publier que s’il a changé — c’est exactement ce que fait la variable last_code du script de la méthode 1.


Méthode 3 — Le mod DiscordConnector

DiscordConnector (auteur : nwesterhausen) est un mod BepInEx complet : annonces de démarrage, d’arrêt, connexions, déconnexions, morts, événements aléatoires, et même des classements périodiques.

Trois réserves avant de l’installer :

  • pas de crossplay : c’est un mod BepInEx ;
  • compatibilité 1.0 à vérifier : sa dernière version au moment où nous écrivons (3.1.3) date du 25 août 2026 et cible la version 0.222.4 du jeu, avant la 1.0 ;
  • depuis sa version 3.1.0, certaines fonctions liées au chat demandent un plugin complémentaire côté joueurs ; le reste fonctionne avec le seul plugin serveur.

Pour un serveur moddé réservé au PC, c’est l’option la plus riche. Pour un serveur crossplay, restez sur les méthodes 1 ou 2.


Et chez un hébergeur ?

Chez un hébergeur, vous n’avez généralement pas la main sur le système pour faire tourner un script en permanence. Deux possibilités : les fonctions d’annonce éventuellement proposées par le panel, ou le mod DiscordConnector si votre serveur est moddé et sans crossplay. Posez la question au support : sur un serveur Valheim HebergTonServ, l’équipe vous répond en français, 24/7.


FAQ

Comment afficher le code de connexion Valheim sur Discord automatiquement ?

Lisez le log du serveur et envoyez à un webhook Discord le code contenu dans la ligne Session "…" with join code … is active with …, uniquement quand il change. Le script de ce guide le fait, sans mod, donc en restant compatible crossplay.

Pourquoi mon bot annonce-t-il un code qui ne marche pas ?

Parce qu’il lit la première ligne de code au démarrage (registered with join code). Le serveur peut ensuite créer un autre code. Seule la ligne is active with donne le code actif.

Comment être prévenu quand un joueur se connecte sur Valheim ?

Surveillez la ligne Got character ZDOID from <nom> dans le log. Comme elle se répète après chaque mort, filtrez les doublons sur quelques minutes.

Faut-il un mod pour relier Valheim à Discord ?

Non. Un webhook Discord et la lecture des logs suffisent, ce qui fonctionne aussi en crossplay. Un mod comme DiscordConnector apporte davantage de fonctions, mais exige BepInEx.

Peut-on prévenir les joueurs avant un redémarrage ?

Pas dans le jeu : Valheim n’a pas d’annonce native. Il faut passer par Discord, par exemple avec le hook PRE_RESTART_HOOK de l’image Docker, ou un message envoyé par votre script de redémarrage.


Conclusion

Relier un serveur Valheim à Discord ne demande aucun mod : un webhook, trois lignes de log (Game server connected, … is active with …, Got character ZDOID from) et un script de trente lignes suffisent. L’annonce automatique du code de connexion est à elle seule une raison de le faire sur tout serveur crossplay.

Pour un serveur Valheim crossplay prêt à l’emploi, HebergTonServ démarre à 7,90 €/mois.

Pour aller plus loin

Sources : guide officiel Iron Gate — A Guide to Dedicated Servers (-logFile, Game server connected), README de l’image Docker communautaire (filtres de log, hooks, exemples Discord), ianepreston/nixos #663 — code de connexion remplacé après l’enregistrement, DiscordConnector sur Thunderstore. Le script de la méthode 1 est un exemple rédigé par HebergTonServ : testez-le avant de le mettre en production.