From 67cd245a0a0b0d6a76181b5c58beeaf8ae9f8396 Mon Sep 17 00:00:00 2001 From: scriptos Date: Fri, 19 Sep 2025 19:47:58 +0200 Subject: [PATCH] =?UTF-8?q?Tags=20entfernt;=20Titel=20statisch=20(kein=20J?= =?UTF-8?q?oin/Leave=20im=20Titel);=20DNS:Port=20im=20Body=20erg=C3=A4nzt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env | 1 - mc-ntfy-notify.v1.sh | 52 ++++++++++++++++++-------------------------- 2 files changed, 21 insertions(+), 32 deletions(-) diff --git a/.env b/.env index 5b8532f..a0b6cc6 100644 --- a/.env +++ b/.env @@ -9,7 +9,6 @@ export ANNOUNCE_SERVER_UPDOWN="true" # Anzeigename/Tag SERVER_NAME="[GER] Blockventure | ⌁25573" -SERVER_TAG="blockventure-25573" # ntfy export NTFY_SERVER="https://ntfy.pushservice.techniverse.net" diff --git a/mc-ntfy-notify.v1.sh b/mc-ntfy-notify.v1.sh index 558789e..153ff70 100644 --- a/mc-ntfy-notify.v1.sh +++ b/mc-ntfy-notify.v1.sh @@ -4,19 +4,16 @@ # Autor: Patrick Asmus # Web: https://www.cleveradmin.de # Repository: https://git.techniverse.net/scriptos/minecraft-ntfy-notify -# Version: 1.4 +# Version: 1.5 # Datum: 18.09.2025 -# Modifikation: -# - Serverlabel/Tags (SERVER_NAME/SERVER_TAG) in Titel & ntfy-Tags -# - State-Verzeichnis per Instanz (Host:Port:Topic) -# - Optionales ENV_FILE zum Laden einer spezifischen .env +# Modifikation: Tags entfernt; Titel statisch (kein Join/Leave im Titel); DNS:Port im Body ergänzt ##################################################### set -euo pipefail export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" -# --- .env laden: zuerst ENV_FILE (falls gesetzt), sonst ./.env --- +# .env laden: bevorzugt ENV_FILE, sonst ./.env if [[ -n "${ENV_FILE:-}" && -f "${ENV_FILE}" ]]; then set -a; . "${ENV_FILE}"; set +a elif [[ -f "${SCRIPT_DIR}/.env" ]]; then @@ -36,33 +33,25 @@ NTFY_SERVER="${NTFY_SERVER:-}" NTFY_TOPIC="${NTFY_TOPIC:-}" NTFY_TOKEN="${NTFY_TOKEN:-}" NTFY_TITLE_PREFIX="${NTFY_TITLE_PREFIX:-Minecraft}" -NTFY_TAGS_BASE="${NTFY_TAGS_BASE:-minecraft}" NTFY_PRIORITY_JOIN="${NTFY_PRIORITY_JOIN:-3}" NTFY_PRIORITY_LEAVE="${NTFY_PRIORITY_LEAVE:-3}" NTFY_PRIORITY_UP="${NTFY_PRIORITY_UP:-4}" NTFY_PRIORITY_DOWN="${NTFY_PRIORITY_DOWN:-5}" NTFY_MARKDOWN="${NTFY_MARKDOWN:-false}" -# Server-Label/Tag -SERVER_NAME="${SERVER_NAME:-}" # z. B. "[GER] Blockventure | ⌁25573" -SERVER_LABEL="${SERVER_NAME:-${MC_HOST}:${RCON_PORT}}" -# Maschinenfreundlicher Tag, wenn nicht gesetzt: aus Name oder Host:Port ableiten -SERVER_TAG="${SERVER_TAG:-$(printf '%s' "${SERVER_NAME:-${MC_HOST}-${RCON_PORT}}" \ - | tr '[:upper:]' '[:lower:]' | sed -E 's/[^a-z0-9]+/-/g;s/^-+|-+$//g')}" +# Optionaler Anzeigename (nur informativ) +SERVER_NAME="${SERVER_NAME:-}" -# ==== Lock & State (pro Instanz eindeutig nach Host:Port:Topic) ==== +# Lock & State je Instanz (Host:Port:Topic) LOCK_KEY="$(printf '%s' "${MC_HOST}_${RCON_PORT}_${NTFY_TOPIC}" | tr -c 'A-Za-z0-9._-' '_')" -# eigenes State-Verzeichnis je Instanz (damit mehrere Server parallel sauber laufen) STATE_DIR="${STATE_DIR:-${SCRIPT_DIR}/state.${LOCK_KEY}}" STATE_PLAYERS="${STATE_DIR}/players.prev" STATE_UP="${STATE_DIR}/server_up.prev" - RUN_DIR="${RUN_DIR:-${STATE_DIR}}" LOCK_DIR="${RUN_DIR}/lock.${LOCK_KEY}" PID_FILE="${LOCK_DIR}/pid" RUN_MARK="${RUN_DIR}/running.${LOCK_KEY}" -# Optional Debug DEBUG="${DEBUG:-false}" # ===== Helpers ===== @@ -96,10 +85,11 @@ acquire_lock() { } ntfy_notify() { - local title="$1" body="$2" tags="$3" priority="$4" + # ntfy_notify "Titel" "Nachricht" PRIORITY + local title="$1" body="$2" priority="$3" [[ -z "$NTFY_SERVER" || -z "$NTFY_TOPIC" ]] && { echo "ntfy Server/Topic fehlt – skip"; return 1; } local url="${NTFY_SERVER%/}/${NTFY_TOPIC}" - local args=(-sS -X POST "$url" -H "Title: ${title}" -H "Priority: ${priority}" -H "Tags: ${tags}") + local args=(-sS -X POST "$url" -H "Title: ${title}" -H "Priority: ${priority}") [[ "$NTFY_MARKDOWN" == "true" ]] && args+=(-H "Markdown: yes") [[ -n "$NTFY_TOKEN" ]] && args+=(-H "Authorization: Bearer ${NTFY_TOKEN}") curl "${args[@]}" --data-raw "$body" >/dev/null 2>&1 || return 1 @@ -112,7 +102,7 @@ ensure_state() { [[ -f "$STATE_UP" ]] || echo "unknown" >"$STATE_UP" } -# Strippt ANSI-Escape-Sequenzen, MC-Farbcodes (§x), CR und Steuerzeichen +# ANSI- und MC-Farbcodes entfernen sanitize() { sed -E $'s/\x1B\\[[0-9;]*[A-Za-z]//g' \ | sed -E 's/§[0-9A-FK-ORa-fk-or]//g' \ @@ -150,7 +140,7 @@ need_bin mcrcon ensure_state acquire_lock -echo "Starte Polling ${MC_HOST}:${RCON_PORT} → ntfy ${NTFY_SERVER}/${NTFY_TOPIC} (PID $$) [${SERVER_LABEL}]" +echo "Starte Polling ${MC_HOST}:${RCON_PORT} -> ntfy ${NTFY_SERVER}/${NTFY_TOPIC} (PID $$)" prev_up="$(cat "$STATE_UP")" # ===== Main Loop ===== @@ -167,13 +157,13 @@ while :; do if [[ "$ANNOUNCE_SERVER_UPDOWN" == "true" && "$prev_up" != "unknown" && "$server_up" != "$prev_up" ]]; then if [[ "$server_up" == "true" ]]; then - ntfy_notify "${NTFY_TITLE_PREFIX}: Server up — ${SERVER_LABEL}" \ + ntfy_notify "${NTFY_TITLE_PREFIX}" \ "Server ist wieder erreichbar (${MC_HOST}:${RCON_PORT})." \ - "${NTFY_TAGS_BASE},${SERVER_TAG},up" "$NTFY_PRIORITY_UP" || true + "$NTFY_PRIORITY_UP" || true else - ntfy_notify "${NTFY_TITLE_PREFIX}: Server down — ${SERVER_LABEL}" \ + ntfy_notify "${NTFY_TITLE_PREFIX}" \ "Server ist nicht erreichbar (${MC_HOST}:${RCON_PORT})." \ - "${NTFY_TAGS_BASE},${SERVER_TAG},down" "$NTFY_PRIORITY_DOWN" || true + "$NTFY_PRIORITY_DOWN" || true fi fi @@ -185,17 +175,17 @@ while :; do if [[ -n "$joined" ]]; then while IFS= read -r name; do [[ -z "$name" ]] && continue - ntfy_notify "${NTFY_TITLE_PREFIX}: Join — ${SERVER_LABEL}" \ - "Player \"${name}\" ist beigetreten." \ - "${NTFY_TAGS_BASE},${SERVER_TAG},join" "$NTFY_PRIORITY_JOIN" || true + ntfy_notify "${NTFY_TITLE_PREFIX}" \ + "Player \"${name}\" ist beigetreten. Server: ${MC_HOST}:${RCON_PORT}" \ + "$NTFY_PRIORITY_JOIN" || true done <<<"$joined" fi if [[ -n "$left" ]]; then while IFS= read -r name; do [[ -z "$name" ]] && continue - ntfy_notify "${NTFY_TITLE_PREFIX}: Leave — ${SERVER_LABEL}" \ - "Player \"${name}\" hat den Server verlassen." \ - "${NTFY_TAGS_BASE},${SERVER_TAG},leave" "$NTFY_PRIORITY_LEAVE" || true + ntfy_notify "${NTFY_TITLE_PREFIX}" \ + "Player \"${name}\" hat den Server verlassen. Server: ${MC_HOST}:${RCON_PORT}" \ + "$NTFY_PRIORITY_LEAVE" || true done <<<"$left" fi