ZeasyAlexandClaude Opus 5 c4dc6ee04f Go-Live-Ping: Discord meldet den Streamstart
Der billigste Hebel im Repo, und bis jetzt nur Vorarbeit: die Webhooks lagen
seit der Discord-Einrichtung bereit, gepostet hat nie jemand.

Ablauf: neuer Stream erkannt, eine Minute warten (Twitch setzt Titel und
Kategorie erst kurz nach dem Start, wer sofort postet kuendigt den Titel des
letzten Streams an), Daten frisch holen, Webhook posten, Rolle Live-Ping
anpingen.

Der Ping funktioniert nur mit `allowed_mentions` im Nachrichtenkoerper. `<@&ID>`
allein faerbt die Erwaehnung lila ein und benachrichtigt niemanden - der
Fehler, den man erst nach drei leeren Streams bemerkt. Dagegen steht ein
eigener Test.

Gegen den doppelten Post stehen drei Dinge, denn wer zweimal in zehn Minuten
angepingt wird, nimmt sich die Rolle wieder ab und ist damit fuer immer stumm:

- Tabelle `posts` mit eindeutigem Index je Stream und Plattform. Nur
  *gesendete* Posts sperren; ein fehlgeschlagener Versuch darf wiederholt
  werden, sonst kostet ein Netzwerkaussetzer die ganze Ankuendigung.
- Abklingzeit von sechs Stunden, gegen die neue Stream-ID nach einem
  Verbindungsabbruch.
- Ausgeloest wird nur beim erkannten Neustart, nie im Fortsetzungszweig.

`stream_id` ist bewusst kein Fremdschluessel: ein Post ist die Quittung fuer
etwas, das den Rechner verlassen hat, und muss auch dann schreibbar sein,
wenn es die Sitzung nicht gibt - beim Probelauf etwa.

Dazu ein vierter Webhook in #technik-log. Der Entwurfsmodus postet dieselbe
Nachricht dorthin, ohne Ping und nur fuer Mods sichtbar. So sieht man das
Ergebnis, bevor es der Server sieht.

Die Rollenaufloesung aus selfroles.ts liegt jetzt in roles.ts, weil der Ping
sie auch braucht: ein Webhook kann eine Rolle nicht ueber ihren Namen
anpingen.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-18 00:12:35 +02:00
2026-09-15 22:05:03 +02:00
2026-09-09 20:05:12 +02:00
2026-09-09 20:12:26 +02:00

abdulive-toolkit

Werkzeugkasten für den Twitch-Kanal abdulive_. Ein Monorepo mit mehreren kleinen Diensten, die sich einen gemeinsamen Kern teilen: Twitch-Auth, Helix-Client, EventSub/IRC-Ingest und eine SQLite-Datenbank.

TypeScript auf Node 24, ohne Laufzeitabhängigkeiten und ohne Build-Schritt — Node führt die .ts-Dateien direkt aus, SQLite und WebSocket sind eingebaut. Betrieb über Docker Compose.

Zielgröße des Kanals: ~5–30 gleichzeitige Zuschauer. Alles hier ist auf diese Phase optimiert — nicht auf Skalierung, sondern auf Wachstum und Bindung.

Die neun Tools

# Tool Ordner Zweck Status
1 Clip-to-Shorts apps/clipper Clips → 9:16 mit Untertiteln, Upload-fertig geplant
2 Go-Live-Broadcaster apps/broadcaster Stream-Start → Discord/Bluesky/Instagram geplant
3 Raid- & Netzwerk-Tool apps/raid-scout Raid-Ziele finden, Raid-Historie führen geplant
4 Analytics-Dashboard apps/dashboard Viewer vs. Chat, Titel-Performance, Retention geplant
5 VOD-Kapitel apps/vod-chapters Szenen-/Kategoriewechsel → Timestamps geplant
6 Community-Gedächtnis apps/community Chatter-Profile, Begrüßungen, Overlay-Hinweise geplant
7 Chat steuert Dinge apps/overlay-server + apps/overlay-web Overlay, Soundboard, Minigames, Umfragen geplant
8 Punktesystem + Shop apps/loyalty Punkte mit echten Konsequenzen geplant
9 Stream-Recap apps/recap Zusammenfassung nach Streamende in Discord geplant

Dazu der Dienst, der unter allen anderen liegt:

| — | Ingest-Daemon | apps/ingest | IRC + Helix → DB, Einrichtungsseite | läuft |

Doku

Auf dem Stream-PC installieren

Eine native Windows-Anwendung. Node, ffmpeg, whisper.cpp und die Schriften sind mitgeliefert — vorausgesetzt wird nur OBS. Kein Docker, kein WSL2, nichts zu übersetzen (ADR-0007).

Ein Befehl, ohne Administratorrechte. Programm und Daten landen im Benutzerprofil.

irm https://git.zeasy.dev/ZeasyAlex/abdulive/raw/branch/main/scripts/install.ps1 | iex

Kein Netz auf dem Stream-PC? Dann das Paket von der Releases-Seite laden, entpacken und darin install.ps1 ausführen.

Der Installer lädt danach das Sprachmodell, läuft den Selbsttest, startet den Daemon und öffnet die Einrichtungsseite. Ein Befehl, und du bist da.

Dort die Twitch-Zugangsdaten eintragen. Sie werden verschlüsselt abgelegt, nicht in einer Datei im Projekt (ADR-0005).

Ausführlich: docs/05-setup.md.

Paket bauen und ausliefern

node scripts/build-package.ts --version 0.5.0

Lädt Node, ffmpeg und whisper.cpp bei ihren Herausgebern, packt alles nach dist/ und schreibt abdulive.json — das Manifest, das der Updater auf Abdus Rechner abfragt. Läuft auch in der CI unter Linux.

Auf dem Stream-PC sieht abdulive update täglich nach und legt eine neue Fassung bereit; eingespielt wird sie beim nächsten Start, nie mitten im Stream.

Aktueller Stand

Vier von sieben Scheiben des MVP „Clip-Knopf" sind gebaut: Toolchain, Einrichtung im Browser, Twitch-Auth, Datenbank, Chat-Aufnahme, OBS-Anbindung mit !clip, 9:16-Render und Untertitel. Dazu die native Auslieferung mit Installer und Updater. 79 Tests grün.

Offen: die Abnahme der OBS-Anbindung an einem laufenden OBS, dann S5 — Onboarding-Assistent und Sichtungsseite.

Details: docs/handoff.md

Tests

node --test "packages/**/*.test.ts" "apps/**/*.test.ts"
S
Description
No description provided
Readme
2.3 MiB
0 Stars 1 Watchers 0 Forks
2026-10-26 12:04:25 +00:00
Languages
TypeScript 73.9%
JavaScript 11%
HTML 8.3%
CSS 3.3%
PowerShell 2.4%
Other 1.1%