EventSub ueber WebSocket wurde in ADR-0003 beschlossen und nie gebaut. Jetzt gebaut, weil Kanalpunkt-Einloesungen ueber IRC nur ankommen, wenn die Belohnung eine Texteingabe verlangt - und selbst dann ohne Einloese-ID. Ohne die ID lassen sich Punkte nicht zurueckgeben, wenn eine Aktion scheitert. Zwei Eigenheiten des Protokolls, die im Code stehen: - Ein Abonnement muss innerhalb von 10 Sekunden nach dem Willkommensgruss stehen, sonst schliesst Twitch wieder. - Bei `session_reconnect` wird erst die neue Verbindung aufgebaut und dann die alte geschlossen. Andersherum faellt genau dazwischen eine Einloesung unter den Tisch. Belohnungen werden ueber ihren Titel zugeordnet, wahlweise ueber die stabile ID; liegt beides vor, gewinnt die ID. Eine unbekannte Belohnung ist kein Fehler - es darf welche geben, die das Toolkit nichts angehen. Zum Vorlesen, und warum es eine Warteschlange hat: chat-control.md schliesst TTS fuer Ausbaustufe 1 aus, und der Grund gilt. Kanalpunkte sammeln sich beim Zugucken von allein an und sind damit kaum eine Huerde; ohne Freigabe hat man eine Vorlesefunktion fuer Fremde im eigenen Stream. Vorgabe ist deshalb die Freigabe von Hand, dazu Laengengrenze, Wortfilter, Drossel je Person und Stunde und ein Panikschalter. Zu langer Text wird abgelehnt statt gekuerzt - ein halb vorgelesener Satz ist schlimmer als gar keiner, weil niemand weiss, ob der Rest Absicht war. Gesprochen wird ueber `speechSynthesis`, im Browser eingebaut: kein Cloud-Dienst, keine Kosten, kein Zuschauertext, der das Haus verlaesst. Ob OBS' Browser-Quelle das kann, ist offen - CEF wird teils ohne Sprachausgabe gebaut. Die Seite prueft es beim Start und blendet einen roten Hinweis ein, statt still zu bleiben. Kanalpunkte haben eine eigene Einblendung. Zwischendurch stand hier die des Abos, womit eine eingeloeste Belohnung als "Neues Abo" im Bild gelandet waere - eine Falschmeldung, die in der Aufzeichnung bleibt. Ein Test haelt das fest. `rewards.enabled` ist aus, bis jemand bewusst Belohnungen eintraegt. Eine Aktion, die niemand erwartet, ist im Stream schlimmer als gar keine. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@abdulive/twitch
OAuth-Token-Store, Helix-Client mit Rate-Limit-Bucket, EventSub-WS, IRC-Client.
Spezifikation: docs/02-twitch-integration.md