Zum Inhalt

File Watcher als Trigger — Game-Log-Auswertung

Streamer.bot kann ein Log-File "tailen" oder Datei-Änderungen detecten. Das öffnet komplette Game-Integration ohne Game-API: Game schreibt Events in Log → SB reagiert.

Trigger: Core → File Folder Watcher → Changed ODER Core → File I/O → File Tail Doku: https://docs.streamer.bot/api/triggers/core/file-folder-watcher/changed

File Tail vs File Watcher

File Watcher (Changed) File Tail
Use-Case File-Änderung detecten Streaming neuer Zeilen
Output Komplette neue Datei-Info Pro neuer Zeile ein Trigger
Performance Bei häufigen Änderungen schwerer Effizient für Live-Logs
Empfehlung Configs/Sporadic Game-Logs, Live-Streams

Für Game-Logs (sehr aktive Files) → File Tail.

File Tail Setup

  1. Links Services → File Tail
  2. Rechtsklick → + Add File Tail
  3. Felder:
Feld Wert
Name Game-Log-Tail
File Path C:\Games\MyGame\Logs\latest.log
Enabled aktiv
  1. Save

Trigger: File Tail

In einer Action:

Trigger: Core → File I/O → File Tail

Verfügbare Variablen:

Variable Inhalt
%line% Die neu hinzugekommene Log-Zeile
%fileName% Dateiname
%fullPath% Voller Pfad

Use-Case A: Minecraft Death Detection

Minecraft schreibt in logs/latest.log:

[18:42:17] [Server thread/INFO]: Player123 was slain by Zombie

SB:

[FileTail] Minecraft Death
Trigger: Core → File I/O → File Tail (Minecraft-Log-Tail)
├── 1. If/Else: %line% Contains "was slain by"
│   ├── Custom Event Trigger: gameDeath (Use Args: ✅)
│   └── Break
└── (kein Match → ignorieren)

Plus separate Listener-Action [Sys] Death Counter:

[Sys] Death Counter
Trigger: Custom → Custom (gameDeath)
├── Global (Set) Increment: deathCount (Persisted)
├── Set Argument: deathLine = %line%
└── Send Message: "💀 Death #%deathCount% — %deathLine%"

Use-Case B: Achievement-Detection

Game schreibt [18:42:17] ACHIEVEMENT: Player got "First Diamond":

[FileTail] Achievement Detection
Trigger: Core → File I/O → File Tail
├── 1. If/Else: %line% Contains "ACHIEVEMENT:"
│   ├── Send Message: "🏆 Streamer hat ein Achievement: %line%"
│   ├── Discord Basic Webhook: "🏆 New Achievement: %line%"
│   └── Break

Mit Regex-Capture nur den Achievement-Namen extrahieren:

1. If/Else: %line% Regex Match ACHIEVEMENT:.*"([^"]+)"
   ├── Send Message: "🏆 Achievement: %match[1]%"
   └── Break

Use-Case C: Anti-Cheat-Detection für Spieler-Server

Pterodactyl-Game-Server Log auswerten und bei Verstößen reagieren:

[FileTail] Player Ban
Trigger: File Tail (Server-Log)
├── 1. If/Else: %line% Contains "BANNED:"
│   ├── Set Argument: bannedPlayer = $regex(%line%, BANNED:\s+(\w+), $1)$
│   └── Discord Basic Webhook: "🚨 Mod-Action: %bannedPlayer% wurde gebannt"

File Folder Watcher Setup

Für File-Änderungen die NICHT pro-Zeile streamen (z.B. Save-Game-Datei):

  1. Links Services → File/Folder Watcher
  2. Rechtsklick → + Add Watcher
  3. Felder:
Feld Wert
Name SaveFile-Watcher
Path C:\Games\MyGame\Saves\autosave.dat
Watch File aktiv
  1. Save

Use-Case D: Auto-Backup bei Save-File-Update

Wenn Save-Datei sich ändert → Backup-Copy speichern.

[Watcher] SaveFile Backup
Trigger: Core → File Folder Watcher → Changed (SaveFile-Watcher)
└── Write To File:
     File: D:\game-saves\save-%timestamp%.dat
     Content: %fileContent%   (vorher mit Read Lines From File geladen)

Vor Sub-Action das Original lesen:

├── 1. Read Lines From File: source
├── 2. Write To File: dest = %source%

File Watcher Trigger Variablen

Variable Inhalt
%fileName% Dateiname mit Extension
%fullPath% Vollständiger Pfad
%fileSize% Größe in Bytes
%lineCount% Anzahl Zeilen (bei Files)
%line0%, %line1%, ... Einzelne Zeilen (Index-basiert)
%watcherFolder% Watcher-Ordner

File Folder Watcher Filter

In den Watcher-Settings: - File extension filter (z.B. nur .log files) - Include subdirectories Toggle - Watch specific File vs Folder

Performance-Tipps

  • Action Queue für File-Tail-Actions — bei hohen Logs ist 1 Trigger pro Zeile = viel
  • Filter earlyIf/Else %line% Contains "x" als erstes, Break bei No-Match
  • Eine Filtering-Action, dann Custom Event — entkoppelt Filtering von Reaktion. Reaktions-Actions sind cleaner

Häufige Fallen

  • File-Tail liest VOM ANFANG bei SB-Start — bei großem existing Log feuern hunderte Events sofort. Lösung: vor Aktivierung Log truncaten oder Filter so eng dass nur neue Events matchen
  • File-Lock — wenn Game die Datei schreibt und SB lesen will, kann ein Lock collidieren. Modern OS lassen Read trotzdem zu, aber pathologische Cases gibt's
  • Watcher feuert bei Atomic-Write mehrfach — manche Apps schreiben Save-Datei via "Write to .tmp → Rename to .save". Das löst sowohl Created als auch Changed aus. Filter im Trigger nutzen
  • Pfad mit Sondersymbolen — Backslash funktioniert, aber Pfade mit ASCII-Bereich-Sonderzeichen können Probleme machen

Quellen