Skip to content

Repository files navigation

Discord VIP Exchanger Logo

Discord VIP Exchanger

Synchronisiert gefilterte VIP-Einträge zwischen zwei Hell-Let-Loose-Servern über die CRCON-API.

contributors last update forks stars issues license


Inhaltsverzeichnis


Über das Projekt

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.


Funktionen

  • 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

Technik

  • Python: 3.12
  • Discord: discord.py
  • HTTP: aiohttp und requests
  • Datenbank: SQLite
  • Konfiguration: .env
  • Deployment: Docker Compose oder systemd
  • Schnittstelle: CRCON-Tool API

Funktionsweise

  1. Der Bot lädt die VIP-Liste des Hauptservers.
  2. Nur Einträge, die zu VIP_FILTERS passen, werden übernommen.
  3. Die Zielserver-Liste wird ebenfalls geladen und gefiltert.
  4. Beide Listen werden in SQLite gespeichert und verglichen.
  5. Unterschiede landen zunächst in sync.
  6. !show_sync zeigt die geplanten Änderungen.
  7. !apply_sync oder 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.


Voraussetzungen

  • 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.


Konfiguration

Repository klonen und .env erstellen:

git clone https://github.com/FwSchultz/Discord-VIP-Exchanger.git
cd Discord-VIP-Exchanger
cp .env.example .env

Windows PowerShell:

Copy-Item .env.example .env

Wichtige 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=INFO

AUTO_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.


Installation mit Docker Compose

docker compose up -d --build

Status und Logs:

docker compose ps
docker compose logs -f discord-vip-exchanger

Stoppen:

docker compose down

Datenbank, Logs und Exporte bleiben durch die eingebundenen Ordner erhalten.


Lokale Installation

python -m venv .venv

Linux:

source .venv/bin/activate
pip install -r requirements.txt
python bot.py

Windows PowerShell:

.\.venv\Scripts\Activate.ps1
pip install -r requirements.txt
python bot.py

Eine systemd-Beispieldatei liegt unter deploy/systemd/.


Befehle

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.


Datenbank und Backups

SQLite verwendet diese Tabellen:

  • vips – gefilterte Hauptserver-Liste
  • receiver_vips – gefilterte Zielserver-Liste
  • sync – ausstehende Änderungen
  • vip_backup – vor dem Löschen gesicherte Einträge

Die Datenbank liegt standardmäßig unter data/vips.db und wird nicht in Git eingecheckt.


Sicherheit

  • Echte Tokens ausschließlich in .env speichern.
  • .env niemals 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_ROLES aktivieren.
  • CRCON möglichst nur intern, per VPN oder hinter einem Reverse Proxy mit TLS erreichbar machen.

Roadmap

  • 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

Lizenz

Veröffentlicht unter der MIT-Lizenz. Details stehen in LICENSE.


Kontakt

Fw.Schultz

About

Discord-Bot zur automatisierten Synchronisation von VIP-Spielern zwischen Hell-Let-Loose-CRCON-Servern.

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Used by

Contributors

Languages