HOI4 ELO Discord Bot
Ein Discord Bot für Hearts of Iron IV, der über Coolify deployed werden kann.
Features
- ELO-System (Standard/Competitive), Spiele-Lifecycle (/hoi4create, /hoi4setup, /hoi4end)
- Stats, History und Leaderboard
- Emoji-/Länder-Tag-Unterstützung (tags.txt, emotes.markdown)
- Automatische Rollenvergabe nach ELO (pro Kategorie)
- YouTube Musikplayer (yt-dlp + ffmpeg) mit Queue und Lautstärke
- Docker/Coolify ready
Verfügbare Befehle (Auszug)
/hoi4create <type> <name>– Neues Spiel anlegen (type: standard/competitive)/hoi4setup <game> <user> <team> <t-level> [country]– Spieler hinzufügen (T1/2/3; country optional als HOI4-Tag)/hoi4end <game> <winner_team|draw>– Spiel beenden, ELO berechnen, Rollen syncen/hoi4stats [user]– ELO, Rank, Win/Draw/Loss/hoi4history [limit] [player] [name] [type]– Abgeschlossene Spiele filtern/hoi4leaderboard [type] [limit]– Top ELOs- Musik:
/join,/leave,/play <url|search>,/skip,/stop,/pause,/resume,/queue,/np,/volume <0-200> - Diagnose:
/webtest [query]– Testet Web-Konnektivität und yt-dlp-Extraction
Setup für Coolify
1. Discord Bot erstellen
- Gehe zu https://discord.com/developers/applications
- Erstelle eine neue Application
- Gehe zu "Bot" und erstelle einen Bot
- Kopiere den Bot Token
2. Bot Permissions
Der Bot benötigt folgende Permissions:
Send MessagesRead Message HistoryUse Slash CommandsEmbed LinksRead Messages/View Channels
3. Coolify Deployment
-
Repository: Verbinde dein Git Repository mit Coolify
-
Umgebungsvariablen: Setze folgende Variablen in Coolify:
DISCORD_TOKEN= Dein Bot Token- Entweder
DATABASE_URL(mysql://user:pass@host:port/db) ODER EinzelwerteDB_HOST,DB_PORT,DB_NAME,DB_USER,DB_PASSWORD - Für YouTube (optional, empfohlen bei „Sign in to confirm you’re not a bot“):
YTDL_COOKIES_B64= Base64-kodierte cookies.txt (Netscape-Format), ODERYTDL_COOKIES_FILE= Pfad zu cookies.txt im Container (z. B. /app/cookies.txt)- Optional:
YTDL_UA(User-Agent),YTDL_YT_CLIENT(z. B. android/web)
-
Build Settings:
- Coolify wird automatisch das Dockerfile verwenden
- Port: Der Bot läuft als Service, kein HTTP-Port erforderlich
-
Deploy: Starte das Deployment
Lokale Entwicklung
Voraussetzungen
- Python 3.10+
- pip
Installation
-
Repository klonen
-
Dependencies installieren:
pip install -r requirements.txt -
.envDatei erstellen:cp .env.example .env -
Discord Token in
.enveintragen:DISCORD_TOKEN=your_actual_bot_token_here -
Bot starten:
python app.py
YouTube-Cookies bereitstellen (empfohlen)
YouTube kann Server/Container ohne Cookies blockieren („Sign in to confirm you’re not a bot“). Übergib Cookies im Netscape-Format:
Variante A – Base64 via Env (einfach in Coolify)
- Exportiere cookies.txt aus deinem Browser (Erweiterung „Get cookies.txt“ oder yt-dlp Export aus lokaler Browser-Session).
- Base64-kodiere die Datei (Windows PowerShell):
[Convert]::ToBase64String([IO.File]::ReadAllBytes("cookies.txt")) | Set-Clipboard
- In Coolify
YTDL_COOKIES_B64setzen (Inhalt aus der Zwischenablage einfügen) und neu deployen.
Variante B – Datei mounten
- cookies.txt in den Container mounten (z. B.
/app/cookies.txt) undYTDL_COOKIES_FILE=/app/cookies.txtsetzen.
Optional: YTDL_UA setzen (aktueller Browser UA), YTDL_YT_CLIENT (z. B. android).
Web testen (/webtest)
Mit /webtest prüft der Bot:
- HTTP-Reachability (Google 204, YouTube, Discord API)
- yt-dlp-Extraction mit deiner Query oder einem Default-Suchbegriff
- ob Cookies konfiguriert sind (Datei/B64/Browser)
So kannst du schnell sehen, ob der Container Internetzugriff hat und ob yt-dlp wegen Cookies scheitert.
Docker
Lokal mit Docker testen
# Image bauen
docker build -t hoi4-elo-bot .
# Container starten
docker run -e DISCORD_TOKEN=your_token_here hoi4-elo-bot
Projekt Struktur
.
├── app.py # Haupt-Bot-Datei
├── requirements.txt # Python Dependencies
├── Dockerfile # Docker Konfiguration
├── .env.example # Beispiel Umgebungsvariablen
└── README.md # Diese Datei
Erweiterungen
Der Bot ist so strukturiert, dass du einfach weitere Commands hinzufügen kannst:
@bot.command(name='my_command')
async def my_command(ctx):
await ctx.send("Hello World!")
Troubleshooting
Bot startet nicht
- Überprüfe ob der Discord Token korrekt gesetzt ist
- Schaue in die Logs:
docker logs <container_name>
Bot reagiert nicht auf Befehle
- Stelle sicher, dass der Bot die richtigen Permissions hat
- Überprüfe ob Message Content Intent aktiviert ist
Coolify Logs anschauen
- Gehe zu deinem Coolify Service
- Klicke auf "Logs" um die Bot-Ausgabe zu sehen
Support
Bei Problemen schaue in die Coolify Logs oder überprüfe die Discord Developer Console für weitere Informationen.