From 0b5e573d4551903a2413b1d5dbf8a0b621f756f2 Mon Sep 17 00:00:00 2001 From: Alexander Zielonka Date: Sat, 17 Jan 2026 09:59:36 +0100 Subject: [PATCH] Fix Terraria log parsing for player leave detection Changed detection pattern from "hat das Spiel verlassen" to "ist weg" to match actual Terraria server log format. Co-Authored-By: Claude Opus 4.5 --- CLAUDE.md | 2 +- gsm-backend/services/ssh.js | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index 5cdf0f0..84ae4e8 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -61,7 +61,7 @@ ssh root@192.168.2.30 'curl -X POST http://localhost:3000/api/servers/discord/in **Server ohne RCON (Spielererkennung via Log-Parsing)**: - Hytale: Spieler werden über Server-Logs erkannt (`[World|*] Player joined` / `[PlayerSystems] Removing player`) -- Terraria: Spieler werden über PM2-Logs erkannt (`ist beigetreten` / `hat das Spiel verlassen`) +- Terraria: Spieler werden über PM2-Logs erkannt (`ist beigetreten` / `ist weg`) - Bei neuen Servern ohne RCON: `server.type === 'serverid'` zu folgenden Dateien hinzufügen: - `services/autoshutdown.js` (Zeile ~50) - `services/discordBot.js` (fetchServerStatuses, Zeile ~379) diff --git a/gsm-backend/services/ssh.js b/gsm-backend/services/ssh.js index 3273250..364b7eb 100644 --- a/gsm-backend/services/ssh.js +++ b/gsm-backend/services/ssh.js @@ -651,13 +651,13 @@ export async function getTerrariaPlayers(server) { // Get last 500 lines of PM2 logs const nvmPrefix = "source ~/.nvm/nvm.sh && "; - const result = await ssh.execCommand(nvmPrefix + `pm2 logs ${server.serviceName} --lines 500 --nostream 2>/dev/null | grep -E "ist beigetreten|hat das Spiel verlassen|has joined|has left" | tail -100`); + const result = await ssh.execCommand(nvmPrefix + `pm2 logs ${server.serviceName} --lines 500 --nostream 2>/dev/null | grep -E "ist beigetreten|ist weg|has joined|has left" | tail -100`); const players = new Map(); // PlayerName -> true const lines = result.stdout.split('\n').filter(l => l.trim()); for (const line of lines) { - // German: "Lokführer ist beigetreten." / "Lokführer hat das Spiel verlassen." + // German: "Lokführer ist beigetreten." / "Lokführer ist weg." // English: "PlayerName has joined." / "PlayerName has left." // Join patterns @@ -674,7 +674,7 @@ export async function getTerrariaPlayers(server) { } // Leave patterns - const leaveMatchDE = line.match(/^\d+\|[^\|]+\s*\|\s*(.+?)\s+hat das Spiel verlassen\.?$/i); + const leaveMatchDE = line.match(/^\d+\|[^\|]+\s*\|\s*(.+?)\s+ist weg\.?$/i); const leaveMatchEN = line.match(/^\d+\|[^\|]+\s*\|\s*(.+?)\s+has left\.?$/i); if (leaveMatchDE) {