Fix Terraria log parsing for player leave detection
All checks were successful
Deploy GSM / deploy (push) Successful in 24s

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 <noreply@anthropic.com>
This commit is contained in:
2026-01-17 09:59:36 +01:00
parent df390e63e4
commit 0b5e573d45
2 changed files with 4 additions and 4 deletions

View File

@@ -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)

View File

@@ -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) {