gameadm-repo/bin/gameadm

138 lines
3.4 KiB
Bash
Executable File

#!/bin/bash
set -euo pipefail
# gameadm - Modularer Game Server Administrator
# Ersetzt rustadm und ist für verschiedene Spiele erweiterbar
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
GAMEADM_DIR="/etc/gameadm"
MODULES_DIR="$GAMEADM_DIR/modules"
# Farben für bessere Ausgabe
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Logging-Funktion
log() {
local level="$1"
shift
local message="$*"
local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
case "$level" in
"INFO") echo -e "${GREEN}[gameadm]${NC} $message" ;;
"WARN") echo -e "${YELLOW}[gameadm]${NC} $message" ;;
"ERROR") echo -e "${RED}[gameadm]${NC} $message" ;;
"DEBUG") echo -e "${BLUE}[gameadm]${NC} $message" ;;
esac
}
# Hilfsfunktionen
show_help() {
cat <<EOF
gameadm - Modularer Game Server Administrator
Verwendung:
gameadm <spiel> <befehl> [optionen]
Verfügbare Spiele:
rust - Rust Game Server
mc - Minecraft Server (zukünftig)
# Weitere Spiele können hier hinzugefügt werden
Verfügbare Befehle (pro Spiel):
start - Startet den Server
stop - Stoppt den Server
restart - Startet den Server neu
status - Zeigt Server-Status
logs - Zeigt Server-Logs
follow - Folgt Logs in Echtzeit
update - Aktualisiert Server-Image
help - Zeigt Hilfe für das Spiel
Beispiele:
gameadm rust start
gameadm rust status
gameadm rust logs
gameadm mc help
Konfiguration: $GAMEADM_DIR/
Module: $MODULES_DIR/
EOF
}
# Spiel-Modul laden
load_game_module() {
local game="$1"
local module_file="$MODULES_DIR/${game}.sh"
if [[ ! -f "$module_file" ]]; then
log "ERROR" "Spiel '$game' nicht gefunden. Verfügbare Module:"
ls -1 "$MODULES_DIR"/*.sh 2>/dev/null | sed 's|.*/||' | sed 's|\.sh$||' | sort || log "WARN" "Keine Module gefunden in $MODULES_DIR"
exit 1
fi
# Modul laden
# shellcheck disable=SC1090
source "$module_file"
}
# Hauptfunktion
main() {
# Verzeichnisse erstellen falls nicht vorhanden
mkdir -p "$GAMEADM_DIR" "$MODULES_DIR"
# Keine Argumente = Hilfe anzeigen
if [[ $# -eq 0 ]]; then
show_help
exit 0
fi
# Erstes Argument ist das Spiel
local game="$1"
shift
# Spezielle Befehle
case "$game" in
"help"|"-h"|"--help")
show_help
exit 0
;;
"list"|"ls")
log "INFO" "Verfügbare Spiele:"
ls -1 "$MODULES_DIR"/*.sh 2>/dev/null | sed 's|.*/||' | sed 's|\.sh$||' | sort || log "WARN" "Keine Module gefunden"
exit 0
;;
"version"|"-v"|"--version")
echo "gameadm v1.0.0 - Modularer Game Server Administrator"
exit 0
;;
esac
# Spiel-Modul laden
load_game_module "$game"
# Modul-spezifische Befehle ausführen
if [[ $# -eq 0 ]]; then
log "ERROR" "Kein Befehl angegeben für '$game'. Verwenden Sie 'gameadm $game help' für Hilfe."
exit 1
fi
local command="$1"
shift
# Befehl an das Modul weiterleiten
if declare -f "cmd_${command}" >/dev/null 2>&1; then
"cmd_${command}" "$@"
else
log "ERROR" "Unbekannter Befehl '$command' für '$game'. Verwenden Sie 'gameadm $game help' für verfügbare Befehle."
exit 1
fi
}
# Hauptprogramm ausführen
main "$@"