Der Server ist kein Tool aus der Neunerliste, aber Broadcaster, Recap und Clipper posten dorthin. Deshalb steht die Struktur als Code im Repo und nicht nur in einer Oberflaeche. packages/discord: - permissions.ts Rechtebits als BigInt, das Feld ist 64 Bit breit - api.ts REST-Client: Warteschlange, Rate Limits, lesbare Fehler - plan.ts Rollen, Kanaele, Rechte, AutoMod, Willkommenstext - apply.ts traegt den Bauplan auf einen bestehenden Server auf Neuer Befehl `abdulive discord:setup [--server ID] [--vorschau]`. Zugeschnitten auf 5 bis 30 gleichzeitige Zuschauer: fuenf sichtbare Kanaele statt zwanzig, und eine selbst vergebene Rolle Live-Ping statt eines Rundrufs an alle bei jedem Stream. Wiederholbar statt einmalig: gefunden wird ueber Namen und frueheren Namen, danach wird angeglichen. Der zweite Lauf aendert nichts. Geloescht wird nie, und von Hand gesetzte Rechte-Ausnahmen bleiben stehen. Drei Dinge, die am echten Server nachgemessen und nicht angenommen wurden: - Discord schreibt Textkanaele klein und macht aus Leerzeichen Bindestriche; Emoji, Umlaute und U+2502 bleiben. normalizeName() bildet das ab, sonst geht bei jedem Lauf dieselbe Umbenennung erneut raus. - Kanalnamen lassen sich nur zweimal je zehn Minuten aendern, danach verlangt Discord bis zu neun Minuten Pause. Der Lauf wartet hoechstens eine Minute und meldet den Rest. - Eine Rolle kann nur Rollen unterhalb der eigenen verschieben, auch mit Administrator. rolePositions() rechnet den Platz unter der Bot-Rolle aus, statt blind 3, 2, 1 zu verlangen. Zugangsdaten laufen ueber den verschluesselten Speicher (ADR-0005): der Bot-Token wird verdeckt abgefragt, die drei Webhook-URLs werden nie ausgegeben und nie geloggt. Im Quelltext bleibt es bei ae/oe/ue, alles was ein Mitglied auf Discord liest steht in richtigem Deutsch. Ein Test haelt das fest. Begruendung, Fallstricke und die Schritte von Hand: docs/projects/discord-community.md Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
4.8 KiB
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
docs/00-overview.md— Was hier gebaut wird und warumdocs/01-architecture.md— Aufbau, Datenfluss, Prozessedocs/02-twitch-integration.md— Auth, Scopes, EventSub, Rate Limitsdocs/03-data-model.md— Datenbankschemadocs/04-roadmap.md— Reihenfolge und Meilensteinedocs/05-setup.md— Lokal einrichtendocs/06-hebel-analyse.md— Womit anfangen und warumdocs/07-mvp-plan.md— MVP „Clip-Knopf": Umfang, Scheiben, Zeitplandocs/handoff.md— Übergabe: Stand, Fallstricke, wo weitermachendocs/offene-punkte.md— was noch fehltdocs/obs-layout.md— die Layout-Vorgabe für OBSdocs/projects/— je ein Spec-Dokument pro Tooldocs/projects/discord-community.md— Aufbau des Community-Serversdocs/decisions/— Architekturentscheidungen (ADRs)
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"