# 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.