diff options
Diffstat (limited to 'mc-cmd.sh')
| -rw-r--r-- | mc-cmd.sh | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/mc-cmd.sh b/mc-cmd.sh new file mode 100644 index 0000000..e3c9d6b --- /dev/null +++ b/mc-cmd.sh | |||
| @@ -0,0 +1,35 @@ | |||
| 1 | #!/bin/sh | ||
| 2 | set -e | ||
| 3 | |||
| 4 | ENV_FILE=".env" | ||
| 5 | |||
| 6 | [ -f "$ENV_FILE" ] || { echo "Error: $ENV_FILE not found."; exit 1; } | ||
| 7 | |||
| 8 | while IFS='=' read -r key value; do | ||
| 9 | case "$key" in | ||
| 10 | ''|\#*) continue ;; | ||
| 11 | esac | ||
| 12 | value=$(echo "$value" | sed 's/^"//;s/"$//;s/^'\''//;s/'\''$//') | ||
| 13 | export "$key=$value" | ||
| 14 | done < "$ENV_FILE" | ||
| 15 | |||
| 16 | [ -z "$RCON_PORT" ] && echo "Error: RCON_PORT not set." && exit 1 | ||
| 17 | [ -z "$RCON_PASSWORD" ] && echo "Error: RCON_PASSWORD not set." && exit 1 | ||
| 18 | [ -z "$SERVER_NAME" ] && echo "Error: SERVER_NAME not set." && exit 1 | ||
| 19 | |||
| 20 | COMMAND="$*" | ||
| 21 | |||
| 22 | [ -z "$COMMAND" ] && echo "Error: no command provided." && exit 1 | ||
| 23 | [ "$(printf '%s' "$COMMAND" | wc -c)" -gt 256 ] && echo "Error: command too long." && exit 1 | ||
| 24 | |||
| 25 | LOGFILE="./commands.log" | ||
| 26 | touch "$LOGFILE" | ||
| 27 | |||
| 28 | docker exec -i "${SERVER_NAME}_minecraft" rcon-cli \ | ||
| 29 | --host localhost \ | ||
| 30 | --port "${RCON_PORT}" \ | ||
| 31 | --password "${RCON_PASSWORD}" \ | ||
| 32 | $COMMAND \ | ||
| 33 | && echo "$(date '+%Y-%m-%d %H:%M:%S') | $COMMAND" >> "$LOGFILE" \ | ||
| 34 | && echo "Command sent: $COMMAND" \ | ||
| 35 | || { echo "Error: failed to send command to server."; exit 1; } | ||
