diff --git a/README.md b/README.md index 4e8c173..10e3ab3 100644 --- a/README.md +++ b/README.md @@ -1,33 +1,42 @@ # GameDig Server Status API -Pterodactyl Egg das Gameserver per [GameDig](https://github.com/gamedig/node-gamedig) abfragt -und die Ergebnisse als JSON-REST-API bereitstellt. +Ein Node.js-Dienst für Pterodactyl Panel, der Gameserver (DayZ, CS2, Rust, ARK u.v.m.) per [GameDig](https://github.com/gamedig/node-gamedig) abfragt und die Ergebnisse als JSON-REST-API bereitstellt. -## Unterstützte Spiele (Auswahl) +## Funktionen -| Spiel | `type` in config.json | -|---|---| -| DayZ | `dayz` | -| Counter-Strike 2 | `cs2` | -| Rust | `rust` | -| ARK: Survival Evolved | `arkse` | -| + 320 weitere | [GameDig Games-Liste](https://github.com/gamedig/node-gamedig/blob/master/GAMES_LIST.md) | +- Unterstützt über 320 Spieltypen via GameDig v4 +- Konfigurierbares Abfrage-Intervall +- Optionaler API-Key-Schutz +- CORS-Header für Webintegration +- Einfache Konfiguration per `config.json` --- -## Installation +## Dateien -1. `egg.json` im Pterodactyl-Panel importieren *(Admin → Nests → Import Egg)* -2. Neuen Server anlegen und einen **Port** zuweisen -3. Server starten → Installationsscript lädt automatisch alle Dateien von diesem Repo -4. `config.json` im **Dateimanager** mit deinen Serveradressen anpassen -5. Server neu starten +| Datei | Beschreibung | +|---|---| +| `server.js` | Hauptskript – GameDig-Abfragen + HTTP-Server | +| `entrypoint.sh` | Startskript für Pterodactyl | +| `package.json` | npm-Abhängigkeiten | +| `config.json` | Serverliste (muss angepasst werden) | +| `egg-gameserver-status-api.json` | Pterodactyl Egg | + +--- + +## Installation in Pterodactyl + +1. Egg importieren: Admin → Nests → Import Egg → `egg-gameserver-status-api.json` +2. Neuen Server erstellen, Egg auswählen, Port zuweisen +3. Server installieren lassen +4. `config.json` im Dateimanager anpassen (siehe unten) +5. Server starten --- ## Konfiguration -### config.json (im Pterodactyl-Dateimanager bearbeiten) +### config.json ```json { @@ -35,14 +44,15 @@ und die Ergebnisse als JSON-REST-API bereitstellt. { "label": "DayZ Main Server", "type": "dayz", - "host": "1.2.3.4", + "host": "192.168.1.10", "port": 2302, + "queryPort": 2303, "image": "https://example.com/images/dayz.jpg" }, { "label": "CS2 Server", "type": "cs2", - "host": "1.2.3.4", + "host": "192.168.1.10", "port": 27015, "image": "https://example.com/images/cs2.jpg" } @@ -50,99 +60,92 @@ und die Ergebnisse als JSON-REST-API bereitstellt. } ``` -### Egg-Variablen (im Pterodactyl-Panel konfigurierbar) +**Felder:** + +| Feld | Pflicht | Beschreibung | +|---|---|---| +| `label` | ✓ | Anzeigename des Servers | +| `type` | ✓ | GameDig-Spieltyp (z.B. `dayz`, `cs2`, `rust`, `arkse`) | +| `host` | ✓ | IP-Adresse oder Hostname | +| `port` | ✓ | Spielport | +| `queryPort` | – | Optionaler Query-Port (wenn abweichend vom Spielport) | +| `image` | – | URL zum Spielbild für das Widget | + +**Hinweis zu DayZ:** Der Query-Port ist standardmässig `Spielport + 1` (z.B. 2302 → 2303). Falls manuell geändert, `queryPort` explizit setzen. + +**Spieltypen:** Vollständige Liste unter [GAMES_LIST.md](https://github.com/gamedig/node-gamedig/blob/master/GAMES_LIST.md) + +### Umgebungsvariablen (Pterodactyl) | Variable | Standard | Beschreibung | |---|---|---| -| `QUERY_INTERVAL` | `60` | Abfrageintervall in Sekunden (min. 10) | -| `API_KEY` | *(leer)* | Optionaler API-Schlüssel – leer = offen | +| `QUERY_INTERVAL` | `60` | Abfrage-Intervall in Sekunden (Minimum: 10) | +| `API_KEY` | *(leer)* | API-Key zum Schutz der Endpunkte. Leer = kein Schutz | --- ## API-Endpunkte -### `GET /api/servers` +### GET /api/servers + +Gibt den Status aller konfigurierten Server zurück. **Ohne API-Key:** ``` -GET http://dein-server:PORT/api/servers +GET http://:/api/servers ``` -**Mit API-Key via Header:** +**Mit API-Key:** ``` -GET http://dein-server:PORT/api/servers -X-API-Key: dein-key +GET http://:/api/servers?key=DEINKEY +# oder +GET http://:/api/servers +X-API-Key: DEINKEY ``` -**Mit API-Key via URL-Parameter:** -``` -GET http://dein-server:PORT/api/servers?key=dein-key -``` - -**Beispiel-Antwort:** +**Antwort:** ```json { - "updated": "2026-02-26T14:32:00.000Z", + "updated": "2026-02-26T12:00:00.000Z", "interval_seconds": 60, "servers": [ { - "label": "DayZ Main Server", - "type": "dayz", - "address": "1.2.3.4:2302", - "image": "https://example.com/images/dayz.jpg", - "status": "online", - "players": 12, - "maxPlayers": 60, - "map": "ChernarusPlus", - "name": "My DayZ Server", - "ping": 42, - "connect": "1.2.3.4:2302" - }, - { - "label": "CS2 Server", - "type": "cs2", - "address": "1.2.3.4:27015", - "status": "offline", - "error": "Connection timed out" + "label": "CS2 Server", + "type": "cs2", + "address": "192.168.1.10:27015", + "image": "https://example.com/images/cs2.jpg", + "status": "online", + "players": 8, + "maxPlayers": 16, + "map": "de_dust2", + "ping": 4 } ] } ``` -### `GET /health` +### GET /health -Kein API-Key erforderlich. Geeignet für Uptime-Monitoring. +Statuscheck ohne Authentifizierung. ```json -{ "status": "ok", "updated": "2026-02-26T14:32:00.000Z" } +{ + "status": "ok", + "uptime": 3600.5 +} ``` --- -## DayZ Besonderheit +## Wichtiger Hinweis: NAT / Docker-Netzwerk -DayZ nutzt einen separaten Query-Port (`Game-Port + 24714`). -Falls die Abfrage fehlschlägt, den Query-Port direkt angeben: - -```json -{ "type": "dayz", "host": "1.2.3.4", "port": 27016 } -``` +GameDig verwendet UDP. Wenn der Pterodactyl-Server und die abzufragenden Gameserver auf **demselben Host** laufen, kann ein Hairpin-NAT-Problem auftreten. In diesem Fall die **interne IP** statt der öffentlichen IP in `config.json` verwenden. --- -## Dateien im Container +## Technische Details -``` -/home/container/ -├── server.js ← Hauptscript (API + Query-Loop) -├── entrypoint.sh ← Startscript -├── config.json ← Serverkonfiguration (selbst bearbeiten) -├── package.json ← npm-Konfiguration -└── node_modules/ ← Abhängigkeiten (automatisch installiert) -``` - -## Update - -Um `server.js` oder `entrypoint.sh` zu aktualisieren, einfach die Dateien in -diesem Repo anpassen und den Server im Pterodactyl-Panel **neu installieren** -*(Server → Settings → Reinstall Server)*. +- **Runtime:** Node.js 20 (Alpine) +- **Docker Image:** `ghcr.io/pterodactyl/yolks:nodejs_20` +- **Modul-System:** ESM (`"type": "module"` in package.json) +- **GameDig:** v4.x (CommonJS, via Default-Import)