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¶
- Links Services → File Tail
- Rechtsklick →
+ Add File Tail - Felder:
| Feld | Wert |
|---|---|
| Name | Game-Log-Tail |
| File Path | C:\Games\MyGame\Logs\latest.log |
| Enabled | aktiv |
- 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:
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):
- Links Services → File/Folder Watcher
- Rechtsklick →
+ Add Watcher - Felder:
| Feld | Wert |
|---|---|
| Name | SaveFile-Watcher |
| Path | C:\Games\MyGame\Saves\autosave.dat |
| Watch File | aktiv |
- 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:
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 early —
If/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¶
- File Folder Watcher Changed: https://docs.streamer.bot/api/triggers/core/file-folder-watcher/changed
- File Tail Trigger: https://docs.streamer.bot/api/triggers/core/file-io/file-tail
- File Tail Sub-Action: https://docs.streamer.bot/api/sub-actions/core/file-tail/set-file-tail-state