1 changed files with 99 additions and 0 deletions
@ -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…
Reference in new issue