Tags entfernt; Titel statisch (kein Join/Leave im Titel); DNS:Port im Body ergänzt
This commit is contained in:
parent
5f4b02d912
commit
67cd245a0a
1
.env
1
.env
@ -9,7 +9,6 @@ export ANNOUNCE_SERVER_UPDOWN="true"
|
|||||||
|
|
||||||
# Anzeigename/Tag
|
# Anzeigename/Tag
|
||||||
SERVER_NAME="[GER] Blockventure | ⌁25573"
|
SERVER_NAME="[GER] Blockventure | ⌁25573"
|
||||||
SERVER_TAG="blockventure-25573"
|
|
||||||
|
|
||||||
# ntfy
|
# ntfy
|
||||||
export NTFY_SERVER="https://ntfy.pushservice.techniverse.net"
|
export NTFY_SERVER="https://ntfy.pushservice.techniverse.net"
|
||||||
|
@ -4,19 +4,16 @@
|
|||||||
# Autor: Patrick Asmus
|
# Autor: Patrick Asmus
|
||||||
# Web: https://www.cleveradmin.de
|
# Web: https://www.cleveradmin.de
|
||||||
# Repository: https://git.techniverse.net/scriptos/minecraft-ntfy-notify
|
# Repository: https://git.techniverse.net/scriptos/minecraft-ntfy-notify
|
||||||
# Version: 1.4
|
# Version: 1.5
|
||||||
# Datum: 18.09.2025
|
# Datum: 18.09.2025
|
||||||
# Modifikation:
|
# Modifikation: Tags entfernt; Titel statisch (kein Join/Leave im Titel); DNS:Port im Body ergänzt
|
||||||
# - 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
|
|
||||||
#####################################################
|
#####################################################
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
|
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
|
||||||
|
|
||||||
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
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
|
if [[ -n "${ENV_FILE:-}" && -f "${ENV_FILE}" ]]; then
|
||||||
set -a; . "${ENV_FILE}"; set +a
|
set -a; . "${ENV_FILE}"; set +a
|
||||||
elif [[ -f "${SCRIPT_DIR}/.env" ]]; then
|
elif [[ -f "${SCRIPT_DIR}/.env" ]]; then
|
||||||
@ -36,33 +33,25 @@ NTFY_SERVER="${NTFY_SERVER:-}"
|
|||||||
NTFY_TOPIC="${NTFY_TOPIC:-}"
|
NTFY_TOPIC="${NTFY_TOPIC:-}"
|
||||||
NTFY_TOKEN="${NTFY_TOKEN:-}"
|
NTFY_TOKEN="${NTFY_TOKEN:-}"
|
||||||
NTFY_TITLE_PREFIX="${NTFY_TITLE_PREFIX:-Minecraft}"
|
NTFY_TITLE_PREFIX="${NTFY_TITLE_PREFIX:-Minecraft}"
|
||||||
NTFY_TAGS_BASE="${NTFY_TAGS_BASE:-minecraft}"
|
|
||||||
NTFY_PRIORITY_JOIN="${NTFY_PRIORITY_JOIN:-3}"
|
NTFY_PRIORITY_JOIN="${NTFY_PRIORITY_JOIN:-3}"
|
||||||
NTFY_PRIORITY_LEAVE="${NTFY_PRIORITY_LEAVE:-3}"
|
NTFY_PRIORITY_LEAVE="${NTFY_PRIORITY_LEAVE:-3}"
|
||||||
NTFY_PRIORITY_UP="${NTFY_PRIORITY_UP:-4}"
|
NTFY_PRIORITY_UP="${NTFY_PRIORITY_UP:-4}"
|
||||||
NTFY_PRIORITY_DOWN="${NTFY_PRIORITY_DOWN:-5}"
|
NTFY_PRIORITY_DOWN="${NTFY_PRIORITY_DOWN:-5}"
|
||||||
NTFY_MARKDOWN="${NTFY_MARKDOWN:-false}"
|
NTFY_MARKDOWN="${NTFY_MARKDOWN:-false}"
|
||||||
|
|
||||||
# Server-Label/Tag
|
# Optionaler Anzeigename (nur informativ)
|
||||||
SERVER_NAME="${SERVER_NAME:-}" # z. B. "[GER] Blockventure | ⌁25573"
|
SERVER_NAME="${SERVER_NAME:-}"
|
||||||
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')}"
|
|
||||||
|
|
||||||
# ==== 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._-' '_')"
|
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_DIR="${STATE_DIR:-${SCRIPT_DIR}/state.${LOCK_KEY}}"
|
||||||
STATE_PLAYERS="${STATE_DIR}/players.prev"
|
STATE_PLAYERS="${STATE_DIR}/players.prev"
|
||||||
STATE_UP="${STATE_DIR}/server_up.prev"
|
STATE_UP="${STATE_DIR}/server_up.prev"
|
||||||
|
|
||||||
RUN_DIR="${RUN_DIR:-${STATE_DIR}}"
|
RUN_DIR="${RUN_DIR:-${STATE_DIR}}"
|
||||||
LOCK_DIR="${RUN_DIR}/lock.${LOCK_KEY}"
|
LOCK_DIR="${RUN_DIR}/lock.${LOCK_KEY}"
|
||||||
PID_FILE="${LOCK_DIR}/pid"
|
PID_FILE="${LOCK_DIR}/pid"
|
||||||
RUN_MARK="${RUN_DIR}/running.${LOCK_KEY}"
|
RUN_MARK="${RUN_DIR}/running.${LOCK_KEY}"
|
||||||
|
|
||||||
# Optional Debug
|
|
||||||
DEBUG="${DEBUG:-false}"
|
DEBUG="${DEBUG:-false}"
|
||||||
|
|
||||||
# ===== Helpers =====
|
# ===== Helpers =====
|
||||||
@ -96,10 +85,11 @@ acquire_lock() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ntfy_notify() {
|
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; }
|
[[ -z "$NTFY_SERVER" || -z "$NTFY_TOPIC" ]] && { echo "ntfy Server/Topic fehlt – skip"; return 1; }
|
||||||
local url="${NTFY_SERVER%/}/${NTFY_TOPIC}"
|
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")
|
[[ "$NTFY_MARKDOWN" == "true" ]] && args+=(-H "Markdown: yes")
|
||||||
[[ -n "$NTFY_TOKEN" ]] && args+=(-H "Authorization: Bearer ${NTFY_TOKEN}")
|
[[ -n "$NTFY_TOKEN" ]] && args+=(-H "Authorization: Bearer ${NTFY_TOKEN}")
|
||||||
curl "${args[@]}" --data-raw "$body" >/dev/null 2>&1 || return 1
|
curl "${args[@]}" --data-raw "$body" >/dev/null 2>&1 || return 1
|
||||||
@ -112,7 +102,7 @@ ensure_state() {
|
|||||||
[[ -f "$STATE_UP" ]] || echo "unknown" >"$STATE_UP"
|
[[ -f "$STATE_UP" ]] || echo "unknown" >"$STATE_UP"
|
||||||
}
|
}
|
||||||
|
|
||||||
# Strippt ANSI-Escape-Sequenzen, MC-Farbcodes (§x), CR und Steuerzeichen
|
# ANSI- und MC-Farbcodes entfernen
|
||||||
sanitize() {
|
sanitize() {
|
||||||
sed -E $'s/\x1B\\[[0-9;]*[A-Za-z]//g' \
|
sed -E $'s/\x1B\\[[0-9;]*[A-Za-z]//g' \
|
||||||
| sed -E 's/§[0-9A-FK-ORa-fk-or]//g' \
|
| sed -E 's/§[0-9A-FK-ORa-fk-or]//g' \
|
||||||
@ -150,7 +140,7 @@ need_bin mcrcon
|
|||||||
ensure_state
|
ensure_state
|
||||||
acquire_lock
|
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")"
|
prev_up="$(cat "$STATE_UP")"
|
||||||
|
|
||||||
# ===== Main Loop =====
|
# ===== Main Loop =====
|
||||||
@ -167,13 +157,13 @@ while :; do
|
|||||||
|
|
||||||
if [[ "$ANNOUNCE_SERVER_UPDOWN" == "true" && "$prev_up" != "unknown" && "$server_up" != "$prev_up" ]]; then
|
if [[ "$ANNOUNCE_SERVER_UPDOWN" == "true" && "$prev_up" != "unknown" && "$server_up" != "$prev_up" ]]; then
|
||||||
if [[ "$server_up" == "true" ]]; 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})." \
|
"Server ist wieder erreichbar (${MC_HOST}:${RCON_PORT})." \
|
||||||
"${NTFY_TAGS_BASE},${SERVER_TAG},up" "$NTFY_PRIORITY_UP" || true
|
"$NTFY_PRIORITY_UP" || true
|
||||||
else
|
else
|
||||||
ntfy_notify "${NTFY_TITLE_PREFIX}: Server down — ${SERVER_LABEL}" \
|
ntfy_notify "${NTFY_TITLE_PREFIX}" \
|
||||||
"Server ist nicht erreichbar (${MC_HOST}:${RCON_PORT})." \
|
"Server ist nicht erreichbar (${MC_HOST}:${RCON_PORT})." \
|
||||||
"${NTFY_TAGS_BASE},${SERVER_TAG},down" "$NTFY_PRIORITY_DOWN" || true
|
"$NTFY_PRIORITY_DOWN" || true
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@ -185,17 +175,17 @@ while :; do
|
|||||||
if [[ -n "$joined" ]]; then
|
if [[ -n "$joined" ]]; then
|
||||||
while IFS= read -r name; do
|
while IFS= read -r name; do
|
||||||
[[ -z "$name" ]] && continue
|
[[ -z "$name" ]] && continue
|
||||||
ntfy_notify "${NTFY_TITLE_PREFIX}: Join — ${SERVER_LABEL}" \
|
ntfy_notify "${NTFY_TITLE_PREFIX}" \
|
||||||
"Player \"${name}\" ist beigetreten." \
|
"Player \"${name}\" ist beigetreten. Server: ${MC_HOST}:${RCON_PORT}" \
|
||||||
"${NTFY_TAGS_BASE},${SERVER_TAG},join" "$NTFY_PRIORITY_JOIN" || true
|
"$NTFY_PRIORITY_JOIN" || true
|
||||||
done <<<"$joined"
|
done <<<"$joined"
|
||||||
fi
|
fi
|
||||||
if [[ -n "$left" ]]; then
|
if [[ -n "$left" ]]; then
|
||||||
while IFS= read -r name; do
|
while IFS= read -r name; do
|
||||||
[[ -z "$name" ]] && continue
|
[[ -z "$name" ]] && continue
|
||||||
ntfy_notify "${NTFY_TITLE_PREFIX}: Leave — ${SERVER_LABEL}" \
|
ntfy_notify "${NTFY_TITLE_PREFIX}" \
|
||||||
"Player \"${name}\" hat den Server verlassen." \
|
"Player \"${name}\" hat den Server verlassen. Server: ${MC_HOST}:${RCON_PORT}" \
|
||||||
"${NTFY_TAGS_BASE},${SERVER_TAG},leave" "$NTFY_PRIORITY_LEAVE" || true
|
"$NTFY_PRIORITY_LEAVE" || true
|
||||||
done <<<"$left"
|
done <<<"$left"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user