Sync Bot — Server-Spiegelung
Synchronisierung
Wie Struktur, Nachrichten, Reaktionen und Namen im Detail synchronisiert werden.
Synchronisierung
Struktur (A → B)
Änderungen an der Kategorie auf Server A werden auf Server B nachgezogen:
- Erstellen, Löschen, Umbenennen von Kanälen
- Reihenfolge (Position) der Kanäle
- Eigenschaften: Typ (Text, Voice, Forum, Announcement), Topic, Slowmode, NSFW
Kanal- und Kategorie-Namen
Namen folgen standardmäßig immer Server A:
- Ohne eigenen Namen folgt ein Kanal auf B immer dem Namen von A — auch bei späteren Umbenennungen auf A.
- Wird ein Kanal auf B per Discord-UI umbenannt, setzt der Bot den Namen wieder zurück (auf den A-Namen bzw. den gesetzten Custom-Namen).
- Ein eigener Name entsteht ausschließlich über
/sync rename-channel— dann ist der Kanal gelockt und wird von A-Umbenennungen nicht mehr überschrieben. - Die Kategorie auf B lässt sich nur über
/sync rename-categorydauerhaft umbenennen.
Nachrichten (A ↔ B)
Nachrichten werden über Webhooks in beide Richtungen gespiegelt — mit Anzeigename und Avatar des ursprünglichen Autors. Übernommen werden Text, Anhänge und Embeds.
- Bearbeiten und Löschen werden mitgespiegelt, ebenso Massen-Löschungen (Purge).
- Auch Nachrichten von Bots und fremden Webhooks werden gespiegelt.
- Erwähnungen lösen echte Pings aus — @User, Rollen und
@everyone/@here.
Loop-Schutz: Nachrichten, die von den eigenen Webhooks des Bots stammen, werden erkannt und
nicht erneut gespiegelt. Genau dafür braucht es eine dauerhafte Datenbank (siehe unten).
Reaktionen
Reaktionen werden 1:1 mitgespiegelt (Hinzufügen und Entfernen).
Discord erlaubt keine Reaktion „im Namen" eines fremden Users — die gespiegelte Reaktion setzt der
Bot. Das Emoji erscheint also korrekt am Partner-Post, aber als Bot-Reaktion. Custom-Emojis von
Servern, in denen der Bot nicht Mitglied ist, können nicht gesetzt werden und werden übersprungen.
Grenzen
- Nachrichten-Spiegelung läuft für Text- und Announcement-Kanäle. Voice und Forum werden strukturell gespiegelt, aber nicht als Nachrichten-Stream.
Datenbank
Der Bot speichert seinen Zustand in einer SQLite-Datenbank mit vier Tabellen:
| Tabelle | Inhalt |
|---|---|
sync_pairs | Die Verbindung A ↔ B inkl. Kategorie-Infos und Status |
channel_mappings | Quell-Kanal ↔ Ziel-Kanal samt beider Webhooks |
message_mappings | Original-Nachricht ↔ gespiegelte Nachricht (für Edits/Deletes) |
custom_names | Gelockte Kanal-Namen auf Server B |
Die Datenbank ist zustandskritisch. Liegt sie nicht auf einem dauerhaften Pfad (
DATABASE_PATH),
gehen nach einem Neustart die Webhook-IDs verloren und der Loop-Schutz greift nicht mehr.