Files
abdulive/docs/decisions/ADR-0003-eventsub-websocket.md
ZeasyAlexandClaude Opus 5 d09e2b945a Struktur, Doku und S0-Toolchain fuer das abdulive-Toolkit
Monorepo-Geruest fuer neun Streamer-Tools plus den Ingest-Daemon, der
unter sechs davon liegt. Enthaelt:

- docs/: Ueberblick, Architektur, Twitch-Integration, Datenmodell,
  Roadmap, Setup, Hebel-Analyse und den MVP-Plan "Clip-Knopf"
- docs/projects/: je eine Spezifikation pro Tool
- docs/decisions/: vier ADRs (TS-Monorepo, SQLite, EventSub/IRC, Docker)
- docker/: Image mit ffmpeg und whisper.cpp, abhaengigkeitsfreier
  Entrypoint mit check-env, fetch-model und calibrate
- config/layout.yaml: aus einem VOD-Screenshot eingemessener
  Facecam-Ausschnitt (440x330 oben links, Chat-Overlay ab x=1270)

Noch kein Anwendungscode - Scheibe S0 aus docs/07-mvp-plan.md.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013VTGjd92LsDDWF3frd9FTB
2026-09-09 08:56:09 +02:00

1.8 KiB

ADR-0003: EventSub über WebSocket, Chat über IRC

Status: akzeptiert · Datum: 2026-09-09

Kontext

Twitch bietet drei Wege an Live-Daten: EventSub über Webhooks, EventSub über WebSocket, und IRC für den Chat. Chat-Nachrichten gibt es inzwischen sowohl über IRC als auch über EventSub (channel.chat.message).

Entscheidung

  • Nicht-Chat-Events über EventSub-WebSocket.
  • Chat über IRC (wss://irc-ws.chat.twitch.tv:443).

Begründung

Gegen Webhooks: Sie brauchen eine öffentlich erreichbare HTTPS-Adresse mit gültigem Zertifikat. Für einen Dienst, der auf Abdus Rechner läuft, hieße das Tunnel oder VPS — zusätzliche bewegliche Teile und eine dauerhafte Abhängigkeit von einem Dritten. WebSocket verbindet sich ausgehend und braucht nichts davon.

Für IRC beim Chat: Die IRCv3-Tags enthalten mehr, als der EventSub-Payload liefert — insbesondere first-msg, returning-chatter, msg-id, vollständige badges und emotes mit Positionen. Das Community-Gedächtnis und der Spike-Detektor hängen genau an diesen Feldern. Außerdem sind die Sende-Rate- Limits über IRC klar dokumentiert (20 Nachrichten / 30 s, 100 für Mods), was für den Begrüßungs-Bot relevant ist.

Konsequenzen

  • Zwei Verbindungen statt einer, beide mit eigenem Reconnect-Verhalten.
  • session_reconnect von EventSub muss korrekt behandelt werden: erst zur neuen URL verbinden, dann die alte schließen — sonst gehen Events verloren.
  • Nach jedem Reconnect wird die Lücke per Helix-Polling geschlossen (Stream-Status, Follower-Liste). Kurze Lücken bei Chat-Nachrichten sind hinnehmbar und nicht nachholbar.
  • Wenn Twitch IRC eines Tages abkündigt, ist der Umstieg auf channel.chat.message auf packages/twitch/chat.ts beschränkt — die Normalisierung auf das interne Event-Format findet dort statt.