Discord: Knopf fuer die Live-Ping-Rolle statt Onboarding

Live-Ping nuetzt nur, wenn man sie sich selbst geben kann. Discords
Onboarding waere der vorgesehene Weg, laesst sich hier aber nicht
einschalten - gemessen, nicht vermutet:

  HTTP 400  Cannot enable onboarding, requirements are not met  (350000)
  sichtbar fuer @everyone: 5   davon beschreibbar: 3
  Discord verlangt:        7   davon beschreibbar: 5

Zwei Kanaele anzulegen, damit eine Schwelle passt, macht den Server leerer
statt besser. Stattdessen ein Knopf unter dem Willkommenstext: ein Druck
holt die Rolle, der naechste gibt sie ab, die Antwort sieht nur, wer
geklickt hat.

Der Knopf braucht eine dauerhafte Verbindung, weil Discord Klicks ans
Gateway oder an eine oeffentliche HTTPS-Adresse liefert und der Stream-PC
keine hat:

- gateway.ts   WebSocket mit Herzschlag, Fortsetzen und Wiederverbinden.
               Bei 4004 und Verwandten wird aufgegeben statt im Kreis zu
               laufen - dagegen hilft nur eine Aenderung an der App.
               intents: 0, der Bot sieht weder Nachrichten noch Mitglieder.
- selfroles.ts Knopfleiste und Rollenwechsel.
- bot.ts       beides zusammen, laeuft im Ingest-Daemon mit. Ohne
               hinterlegtes Token entfaellt er wortlos.

Neuer Befehl `abdulive discord:bot` zum Ausprobieren; im Normalbetrieb
haengt der Bot im Daemon und meldet sich als discordConnected auf der
Statusseite.

Die Knopfleiste gehoert zum Soll-Zustand des Willkommenstextes: fehlt sie,
wird sie nachgereicht, ohne die Nachricht neu zu posten.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
ZeasyAlexandClaude Opus 5 committed 2026-09-15 21:59:08 +02:00
1 parent 3b744caf6a
commit 994ce4faf0
12 files changed
+787 -11

No files matched your search

+43 -6
View File
@@ -80,6 +80,41 @@ ein stummgeschalteter Server ist ein toter Server. Angepingt wird nur, wer sich
die Rolle selbst geholt hat. Das sind weniger Leute, aber es sind die, die
kommen.
### Der Knopf fuer Live-Ping
`Live-Ping` nuetzt nur, wenn man sie sich selbst geben kann. Discord bietet
dafuer **Onboarding** an, aber das laesst sich hier nicht einschalten:
```
HTTP 400 Cannot enable onboarding, requirements are not met (350000)
sichtbar fuer @everyone: 5 davon beschreibbar: 3
Discord verlangt: 7 davon beschreibbar: 5
```
Zwei Kanaele anzulegen, damit eine Schwelle passt, macht den Server leerer
statt besser - genau das, wogegen der ganze Entwurf gebaut ist. Also
stattdessen ein **Knopf unter dem Willkommenstext**. Ein Druck holt die Rolle,
der naechste gibt sie wieder ab, und die Antwort sieht nur, wer geklickt hat.
Der Knopf braucht einen laufenden Bot: Discord liefert Klicks entweder ans
Gateway oder an eine oeffentlich erreichbare HTTPS-Adresse, und der Stream-PC
hat keine. Die Gateway-Verbindung haengt deshalb im Ingest-Daemon mit drin
([`gateway.ts`](../../packages/discord/src/gateway.ts)) und meldet sich als
`discordConnected` auf der Statusseite. Zum Ausprobieren einzeln:
```powershell
abdulive discord:bot
```
Die Verbindung fordert **keine** Absichten an (`intents: 0`). Interaktionen
kommen trotzdem an, aber Nachrichteninhalte und Mitgliederlisten sieht der Bot
nicht - was man nicht anfordert, kann man auch nicht versehentlich mitlesen.
Welche Knoepfe es gibt, steht in `SELF_ROLES` in `plan.ts`. Die `custom_id`
steht dauerhaft in der Nachricht und darf sich nie aendern, sonst tun alte
Knoepfe nichts mehr.
**`Stammgast`** hat fast keine zusaetzlichen Rechte, und das ist Absicht. Der
Wert liegt darin, dass der Name farbig ist und in der Mitgliederliste oben
steht. Bei dieser Kanalgroesse ist sichtbare Zugehoerigkeit der wirksamste
@@ -159,7 +194,7 @@ und nie geloggt - Broadcaster, Recap und Clipper lesen sie von dort.
### 3. Von Hand: der Rest
Vier Dinge kann die API nicht oder nicht sinnvoll:
Drei Dinge kann die API nicht oder nicht sinnvoll:
1. **Dir selbst `Abdu` geben** und die Bot-Rolle in den Servereinstellungen
ueber `Abdu` ziehen. Eine Rolle kann nur Rollen unterhalb der eigenen
@@ -167,15 +202,15 @@ Vier Dinge kann die API nicht oder nicht sinnvoll:
Einladen ganz unten ein, dort ist also kein Platz fuer vier Rollen darunter.
Bis das erledigt ist, meldet das Skript die Rangfolge als uebersprungen und
nennt den Grund.
2. **Onboarding einrichten** (Servereinstellungen > Onboarding) und `Live-Ping`
als waehlbare Rolle anbieten. Das ist der Weg, auf dem sich die Leute die
Rolle selbst holen - ohne ihn bringt sie nichts.
3. **Einladungslink** erzeugen, ohne Ablaufdatum, und ins Twitch-Panel, in die
2. **Einladungslink** erzeugen, ohne Ablaufdatum, und ins Twitch-Panel, in die
Kanalinfo und in einen Chat-Befehl eintragen. Ein Server, den im Stream
niemand erwaehnt, bleibt leer.
4. **Twitch-Konto verbinden** (Servereinstellungen > Integrationen). Danach
3. **Twitch-Konto verbinden** (Servereinstellungen > Integrationen). Danach
bekommen Subs automatisch eine Rolle.
Onboarding steht bewusst nicht in der Liste - warum, steht oben unter
[Der Knopf fuer Live-Ping](#der-knopf-fuer-live-ping).
## Was das Skript nicht tut
**Es loescht nichts.** Keine Kanaele, keine Rollen, keine Nachrichten. Ein
@@ -243,3 +278,5 @@ Umgekehrt gilt genauso: ein Kanal, in dem vier Wochen nichts steht, kommt weg.
schreiben, aber einen Thread eroeffnen.
- Die Webhook-URLs stehen im verschluesselten Speicher und tauchen in keiner
Ausgabe und keinem Log auf.
- Der Knopf unter dem Willkommenstext vergibt `Live-Ping` und nimmt sie beim
zweiten Druck wieder weg; die Antwort sieht nur, wer geklickt hat.