Der Bauplan verspricht, dass ein zweiter Lauf nichts aendert. Zwei Schritte
haben das gebrochen, weil sie ohne Vergleich geschrieben haben: die
Servereinstellungen und die Rangfolge der Rollen.
Aufgefallen beim Einrichten des Technik-Webhooks - der Lauf meldete "GESETZT
abdulive_" und "GESETZT Rangfolge", obwohl die Vorschau zuvor "steht" gesagt
hatte. Vorschau und echter Lauf sagten also Verschiedenes.
Folgenlos war es nicht: jeder Lauf kostete zwei Aufrufe und hinterliess zwei
Eintraege im Audit-Log des Servers, einen davon eine Rollen-Umsortierung.
Jetzt wird beides vorher verglichen. ApiGuild traegt dafuer die vier Felder
aus GUILD_SETTINGS. Ein Test haelt es fest: nach einem Lauf darf der zweite
weder PATCH /guilds/{id} noch PATCH /guilds/{id}/roles schicken.
Am echten Server nachgeprueft - der dritte Lauf meldet keine Aenderung mehr.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@abdulive/discord
Discord-Anbindung: ein kleiner REST-Client und das Einrichten des Community-Servers.
| Datei | Inhalt |
|---|---|
src/permissions.ts |
Rechtebits als BigInt (das Feld ist 64 Bit breit) |
src/api.ts |
REST-Client: Warteschlange, Rate Limits, lesbare Fehler |
src/plan.ts |
Der Bauplan: Rollen, Kanaele, Rechte, Servereinstellungen |
src/apply.ts |
Traegt den Bauplan auf einen bestehenden Server auf |
src/gateway.ts |
WebSocket-Verbindung fuer Klicks auf Knoepfe |
src/selfroles.ts |
Der Knopf, der Live-Ping gibt und wieder nimmt |
src/bot.ts |
Beides zusammen; laeuft im Ingest-Daemon mit |
Einrichten geschieht einmalig ueber apply.ts, der Betrieb laeuft ueber
bot.ts. Beide lesen denselben Bauplan.
Aufruf ueber die CLI:
abdulive discord:setup --server <ID> --vorschau # zeigt nur, was passieren wuerde
abdulive discord:setup --server <ID> # wendet es an
Und der laufende Teil, der die Knoepfe bedient:
abdulive discord:bot # zum Ausprobieren; sonst im Ingest-Daemon
Wiederholbar: gefunden wird ueber den Namen, danach wird angeglichen statt neu angelegt. Geloescht wird nie.
Begruendung der Struktur, die Schritte, die von Hand gehoeren, und die Fallstricke: docs/projects/discord-community.md