Browse Source

feat: init alert_ntfy

pull/4779/head
rconjoe 4 weeks ago
parent
commit
bf883763ac
  1. 99
      lgsm/modules/alert_ntfy.sh

99
lgsm/modules/alert_ntfy.sh

@ -0,0 +1,99 @@
#!/bin/bash
# LinuxGSM alert_ntfy.sh module
# Author: Daniel Gibbs (Original Structure), rconjoe (ntfy Adaptation)
# Contributors: https://linuxgsm.com/contrib
# Website: https://linuxgsm.com
# Description: Sends ntfy alert.
moduleselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
# Default ntfy server if not set in config
if [ -z "${ntfyserver}" ]; then
ntfyserver="https://ntfy.sh"
fi
# Construct the target URL
ntfyurl="${ntfyserver}/${ntfytopic}"
# Determine priority based on alertsound or config override
# ntfy priorities: 1 (min), 2 (low), 3 (default), 4 (high), 5 (max)
if [ -n "${ntfypriority}" ]; then
priority="${ntfypriority}"
elif [ "${alertsound}" == "2" ]; then
# High priority for monitor failures/permissions issues
priority="4"
else
# Default priority for standard notifications
priority="3"
fi
# Determine tags based on alertemoji or config override
if [ -n "${ntfytags}" ]; then
tags="${ntfytags}"
else
# Use the alert emoji as a tag
tags="${alertemoji}"
fi
# Construct the message body
message="Server Name: ${servername}
Information: ${alertmessage}
Game: ${gamename}
Server IP: ${alertip}:${port}
Hostname: ${HOSTNAME}
Server Time: $(date)"
# Add optional links if available
if [ -n "${querytype}" ]; then
message+="\nIs my Game Server Online?: https://ismygameserver.online/${imgsoquerytype}/${alertip}:${queryport}"
fi
# Use alerturl for the click action if available
clickurl=""
if [ -n "${alerturl}" ]; then
message+="\nMore info: ${alerturl}"
clickurl="${alerturl}"
fi
# Prepare curl command
# Start with base command and add headers
cmd=(curl --connect-timeout 10 -sS -X POST)
cmd+=(-H "Title: ${alerttitle}")
cmd+=(-H "Priority: ${priority}")
cmd+=(-H "Tags: ${tags}")
# Add icon if available
if [ -n "${alerticon}" ]; then
cmd+=(-H "Icon: ${alerticon}")
fi
# Add click URL if available
if [ -n "${clickurl}" ]; then
cmd+=(-H "Click: ${clickurl}")
fi
# Add authentication header if token is provided
if [ -n "${ntfytoken}" ]; then
cmd+=(-H "Authorization: Bearer ${ntfytoken}")
# Add basic auth if username/password provided (and token isn't)
elif [ -n "${ntfyusername}" ] && [ -n "${ntfypassword}" ]; then
cmd+=(-u "${ntfyusername}:${ntfypassword}")
fi
# Add message body and target URL
cmd+=(-d "${message}" "${ntfyurl}")
fn_print_dots "Sending ntfy alert to ${ntfyurl}"
# Execute the command
ntfysend=$("${cmd[@]}")
exitcode=$?
# Check exit code and response
if [ "${exitcode}" -eq 0 ] && [[ "${ntfysend}" != *"\"code\":"* ]] && [[ "${ntfysend}" != *"401"* ]] && [[ "${ntfysend}" != *"404"* ]]; then
fn_print_ok_nl "Sending ntfy alert to ${ntfyurl}"
fn_script_log_pass "Sending ntfy alert to ${ntfyurl}"
else
fn_print_fail_nl "Sending ntfy alert to ${ntfyurl}: ${ntfysend} (Exit code: ${exitcode})"
fn_script_log_fail "Sending ntfy alert to ${ntfyurl}: ${ntfysend} (Exit code: ${exitcode})"
fi
Loading…
Cancel
Save