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
This commit is contained in:
commit
d09e2b945a
98 files changed
+3273
No files matched your search
@@ -0,0 +1,40 @@
|
||||
# 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.
|
||||
Reference in new issue
Block a user