- Über das Projekt
- Funktionen
- Technik
- Funktionsweise
- Voraussetzungen
- Konfiguration
- Installation mit Docker Compose
- Lokale Installation
- Befehle
- Datenbank und Backups
- Sicherheit
- Roadmap
- Lizenz
- Kontakt
Der Discord VIP Exchanger verwaltet und synchronisiert VIP-Listen zwischen einem Hauptserver und einem Zielserver für Hell Let Loose. Die Listen werden über die CRCON-API geladen, anhand frei definierbarer Begriffe gefiltert und in einer lokalen SQLite-Datenbank verglichen.
Erkannte Unterschiede werden zunächst in einer sync-Tabelle gespeichert. Dadurch können Änderungen geprüft werden, bevor der Bot sie auf dem Zielserver anwendet. Zusätzlich steht eine automatische Synchronisation in einem konfigurierbaren Stundenintervall zur Verfügung.
- Abruf der VIP-Listen von Haupt- und Zielserver
- Filterung nach Clan-Tags oder frei definierbaren Begriffen
- Vergleich nach Steam-ID, Beschreibung und Ablaufdatum
- Hinzufügen, Entfernen und Aktualisieren von VIP-Einträgen
- Prüfpuffer über eine separate
sync-Tabelle - Automatische Synchronisation in Stundenintervallen
- Rollenbasierter Zugriff auf Bot-Befehle
- Suche nach VIPs über Namensteile
- Export der aktuellen VIP-Liste
- Backup gelöschter Einträge
- Wiederherstellung einzelner VIPs
- Discord-Embeds und optionaler Log-Kanal
- Docker- und systemd-Betrieb
- Python: 3.12
- Discord: discord.py
- HTTP: aiohttp und requests
- Datenbank: SQLite
- Konfiguration:
.env - Deployment: Docker Compose oder systemd
- Schnittstelle: CRCON-Tool API
- Der Bot lädt die VIP-Liste des Hauptservers.
- Nur Einträge, die zu
VIP_FILTERSpassen, werden übernommen. - Die Zielserver-Liste wird ebenfalls geladen und gefiltert.
- Beide Listen werden in SQLite gespeichert und verglichen.
- Unterschiede landen zunächst in
sync. !show_synczeigt die geplanten Änderungen.!apply_syncoder der automatische Task wendet sie auf dem Zielserver an.
Für geänderte Beschreibungen oder Ablaufdaten wird der alte Zielserver-Eintrag entfernt und anschließend neu hinzugefügt.
- Discord-Bot-Anwendung
- Python 3.12 oder Docker
- zwei erreichbare CRCON-Instanzen
- API-Token für Haupt- und Zielserver
Die CRCON-Tokens benötigen mindestens Rechte für:
- VIP-Liste herunterladen
- VIP hinzufügen
- VIP entfernen
- VIP-IDs ansehen
Je nach CRCON-Version können die Berechtigungsnamen abweichen.
Repository klonen und .env erstellen:
git clone https://github.com/FwSchultz/Discord-VIP-Exchanger.git
cd Discord-VIP-Exchanger
cp .env.example .envWindows PowerShell:
Copy-Item .env.example .envWichtige Variablen:
DISCORD_BOT_TOKEN=
RCON_API_URL=http://main-crcon.example:8010
RCON_API_TOKEN=
TARGET_API_URL=http://target-crcon.example:8010
TARGET_API_TOKEN=
DB_FILE=data/vips.db
ALLOWED_ROLES=123456789012345678,987654321098765432
VIP_LOG_CHANNEL=0
VIP_FILTERS=[CLAN],VIP
AUTO_SYNC_INTERVAL=24
HTTP_TIMEOUT_SECONDS=20
LOG_LEVEL=INFOAUTO_SYNC_INTERVAL wird in Stunden angegeben.
ALLOWED_ROLES enthält kommagetrennte Discord-Rollen-IDs. Bleibt der Wert leer, sind die Befehle nicht rollenbeschränkt; für öffentliche Server sollte daher mindestens eine Verwaltungsrolle eingetragen werden.
docker compose up -d --buildStatus und Logs:
docker compose ps
docker compose logs -f discord-vip-exchangerStoppen:
docker compose downDatenbank, Logs und Exporte bleiben durch die eingebundenen Ordner erhalten.
python -m venv .venvLinux:
source .venv/bin/activate
pip install -r requirements.txt
python bot.pyWindows PowerShell:
.\.venv\Scripts\Activate.ps1
pip install -r requirements.txt
python bot.pyEine systemd-Beispieldatei liegt unter deploy/systemd/.
| Befehl | Beschreibung |
|---|---|
!update_vips |
Aktualisiert die Hauptserver-VIPs in der Datenbank |
!sync_vips |
Berechnet Unterschiede und schreibt sie nach sync |
!show_sync |
Zeigt geplante Änderungen |
!apply_sync |
Wendet die geplanten Änderungen an |
!export_vips |
Exportiert die aktuelle VIP-Liste |
!check_vip <Name> |
Sucht per Teilstring nach einem VIP |
!clear_vips |
Sichert und leert die VIP-Tabellen |
!show_backup |
Exportiert gelöschte VIPs |
!restore_vip <Steam-ID> |
Stellt einen Eintrag aus dem Backup wieder her |
!vipbot |
Zeigt die Befehlsübersicht |
Der Bot verwendet Prefix-Befehle und benötigt deshalb den Message Content Intent.
SQLite verwendet diese Tabellen:
vips– gefilterte Hauptserver-Listereceiver_vips– gefilterte Zielserver-Listesync– ausstehende Änderungenvip_backup– vor dem Löschen gesicherte Einträge
Die Datenbank liegt standardmäßig unter data/vips.db und wird nicht in Git eingecheckt.
- Echte Tokens ausschließlich in
.envspeichern. .envniemals veröffentlichen oder versenden.- CRCON-Token nur mit den erforderlichen Rechten ausstatten.
- Den Bot nicht mit Discord-Administratorrechten ausstatten, wenn Einzelrechte genügen.
- Rollenbeschränkung über
ALLOWED_ROLESaktivieren. - CRCON möglichst nur intern, per VPN oder hinter einem Reverse Proxy mit TLS erreichbar machen.
- Umstellung auf Slash-Commands
- eindeutige Aktionstypen in der
sync-Tabelle - Dry-Run und zusätzliche Bestätigung vor manueller Übernahme
- automatisierte Tests für Parser und Vergleichslogik
- Healthcheck und strukturierte JSON-Logs
Veröffentlicht unter der MIT-Lizenz. Details stehen in LICENSE.
Fw.Schultz
- GitHub: FwSchultz
- Website: fwschultz.de
- LinkedIn: Oliver Blume
- Fehler und Vorschläge: GitHub Issues
