Pushover
# ./pushover.sh -t "Pushover via Bash" -m "Pushover message sent with bash from $(hostname -f)" -p1 -s siren -u http://www.google.com -n "Google"
This commit is contained in:
241
pushover.sh
Executable file
241
pushover.sh
Executable file
@@ -0,0 +1,241 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# ./pushover.sh -t "Pushover via Bash" -m "Pushover message sent with bash from $(hostname -f)" -p1 -s siren -u http://www.google.com -n "Google"
|
||||||
|
|
||||||
|
dotenv () {
|
||||||
|
set -a
|
||||||
|
# shellcheck disable=SC1091
|
||||||
|
[ -f "$HOME/.env" ] && . "$HOME/.env" || echo -e "${red}\nNo $HOME/.env file found ! Could'nt get update from Github.'.${reset}"
|
||||||
|
set +a
|
||||||
|
}
|
||||||
|
|
||||||
|
dotenv
|
||||||
|
|
||||||
|
USER_TOKEN=$USER_KEY
|
||||||
|
|
||||||
|
# YOUR APPS TOKENS / UPPERCASE NAME WITH _TOKEN (usage: "-a monitor" uses MONITOR_TOKEN)
|
||||||
|
BASH_TOKEN=$BASH_APP
|
||||||
|
SYNO_TOKEN=$SYNO_APP
|
||||||
|
APP_LIST="bash, syno" # FOR USAGE
|
||||||
|
|
||||||
|
APP_ID="bash" # Default app
|
||||||
|
|
||||||
|
# v1.8
|
||||||
|
# 24-08-2024 :
|
||||||
|
# 14-03-2018 : - Request send only necessary fields.
|
||||||
|
# - Added message pipe.
|
||||||
|
# - Added monospace option.
|
||||||
|
# - Default monitor name
|
||||||
|
# 12-03-2018 : Added image attachment.
|
||||||
|
# 30-01-2016 : Added -getopts- arguments to set retry/expire.
|
||||||
|
# 23-04-2015 : HTML markup language option.
|
||||||
|
|
||||||
|
VERSION=1.8
|
||||||
|
|
||||||
|
TITLE="<empty>"
|
||||||
|
URL="<empty>"
|
||||||
|
URL_TITLE="untitled"
|
||||||
|
PRIORITY=0
|
||||||
|
RETRY=60
|
||||||
|
EXPIRE=86400
|
||||||
|
SOUND="pushover"
|
||||||
|
HTML=0
|
||||||
|
MONOSPACE=0
|
||||||
|
DEVICE="all"
|
||||||
|
IMAGE=
|
||||||
|
DEBUG=0
|
||||||
|
|
||||||
|
usage()
|
||||||
|
{
|
||||||
|
cat << EOF
|
||||||
|
|
||||||
|
usage: $0 options
|
||||||
|
|
||||||
|
Push notifications to your Android, iOS, or desktop devices
|
||||||
|
|
||||||
|
OPTIONS:
|
||||||
|
-a Application name : "$APP_LIST" (required)
|
||||||
|
-m Message (required) If the -f (html) flag = 1, message must be surrounded by a single quote
|
||||||
|
Example: -m \"'This is a <b>HTML</b> test'\"
|
||||||
|
|
||||||
|
-t Title of your notification
|
||||||
|
-d Send to a specific device name Comma seperated list of devices to receive message
|
||||||
|
-p Priority of your message : -2 (Silent), -1 (Quiet), 0 (Normal), 1 (High), 2 (Emergency)
|
||||||
|
-s Sound (https://pushover.net/api#sounds):
|
||||||
|
pushover - Pushover (default)
|
||||||
|
bike - Bike
|
||||||
|
bugle - Bugle
|
||||||
|
cashregister - Cash Register
|
||||||
|
classical - Classical
|
||||||
|
cosmic - Cosmic
|
||||||
|
falling - Falling
|
||||||
|
gamelan - Gamelan
|
||||||
|
incoming - Incoming
|
||||||
|
intermission - Intermission
|
||||||
|
magic - Magic
|
||||||
|
mechanical - Mechanical
|
||||||
|
pianobar - Piano Bar
|
||||||
|
siren - Siren
|
||||||
|
spacealarm - Space Alarm
|
||||||
|
tugboat - Tug Boat
|
||||||
|
alien - Alien Alarm (long)
|
||||||
|
climb - Climb (long)
|
||||||
|
persistent - Persistent (long)
|
||||||
|
echo - Pushover Echo (long)
|
||||||
|
updown - Up Down (long)
|
||||||
|
none - None (silent)
|
||||||
|
-i Attach an image (up to 2.5mb)
|
||||||
|
-u URL Link
|
||||||
|
-n URL Title
|
||||||
|
-r Retry (seconds) Set retry period for notifications with priority 2 (default ${RETRY})"
|
||||||
|
-e Expire (seconds) Set expiration time for notifications with priority 2 (default ${EXPIRE})"
|
||||||
|
|
||||||
|
-f HTML Format Enable HTML formatting, cannot be used with the -k (monospace) flag
|
||||||
|
-k Monospace Format Enable monospace messages, cannot be used with the -f (html) flag
|
||||||
|
-x Debug Must be the first argument !!
|
||||||
|
-z Show some examples
|
||||||
|
-h Show this message
|
||||||
|
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
examples()
|
||||||
|
{
|
||||||
|
local script=`basename "$0"`
|
||||||
|
|
||||||
|
echo "EXAMPLES:"
|
||||||
|
echo
|
||||||
|
echo " ${script} -a \"bash\" -m \"This is a test\""
|
||||||
|
echo " Sends a simple \"This is a test\" message to all devices."
|
||||||
|
echo
|
||||||
|
echo " ${script} -a \"bash\" -m \"This is a test\" -t \"Test Title\""
|
||||||
|
echo " Sends a simple \"This is a test\" message with the title \"Test Title\" to all devices."
|
||||||
|
echo
|
||||||
|
echo " ${script} -a \"bash\" -m \"This is a test\" -d \"pixel8,Safari_airbook\""
|
||||||
|
echo " Sends a simple \"This is a test\" message to the devices named \"pixel8\" and \"Safari_airbook\"."
|
||||||
|
echo
|
||||||
|
echo " ${script} -a \"bash\" -m \"This is a test\" -u \"http://www.google.com\" -n Google"
|
||||||
|
echo " Sends a simple \"This is a test\" message to all devices that contains a link to www.google.com titled \"Google\"."
|
||||||
|
echo
|
||||||
|
echo " ${script} -a \"bash\" -m \"This is a test\" -p 1"
|
||||||
|
echo " Sends a simple \"This is a test\" high priority message to all devices."
|
||||||
|
echo
|
||||||
|
echo " ${script} -a \"bash\" -m \"This is a test\" -s bike"
|
||||||
|
echo " Sends a simple \"This is a test\" message to all devices that uses the sound of a bike bell as the notification sound."
|
||||||
|
echo
|
||||||
|
echo " ${script} -a \"bash\" -m \"This is a test Pic\" -i /path/to/pic.jpg "
|
||||||
|
echo " Sends a simple \"This is a test Pic\" message to all devices and send the Picture with the message."
|
||||||
|
echo
|
||||||
|
echo " ${script} -a \"bash\" -m \"'This is a <b>HTML</b> test'\" -f 1 "
|
||||||
|
echo " Sends a simple \"This is a HTML test\" message with html tag"
|
||||||
|
echo
|
||||||
|
}
|
||||||
|
ARGS=( -F "user=$USER_TOKEN" )
|
||||||
|
|
||||||
|
# MESSAGE PIPE
|
||||||
|
if [ -p /dev/stdin ]
|
||||||
|
then
|
||||||
|
MESSAGE=$(</dev/stdin)
|
||||||
|
ARGS+=( -F "message=$MESSAGE" )
|
||||||
|
else
|
||||||
|
MESSAGE=
|
||||||
|
fi
|
||||||
|
|
||||||
|
while getopts “hfkvt:r:e:u:n:p:s:m:a:d:i:xz” OPTION
|
||||||
|
do
|
||||||
|
case $OPTION in
|
||||||
|
t) TITLE=$OPTARG
|
||||||
|
ARGS+=( -F "title=$TITLE" ) ;;
|
||||||
|
u) URL=$OPTARG
|
||||||
|
ARGS+=( -F "url=$URL" ) ;;
|
||||||
|
n) URL_TITLE=$OPTARG
|
||||||
|
ARGS+=( -F "url_title=$URL_TITLE" ) ;;
|
||||||
|
p) PRIORITY=$OPTARG
|
||||||
|
ARGS+=( -F "priority=$PRIORITY" ) ;;
|
||||||
|
s) SOUND=$OPTARG
|
||||||
|
ARGS+=( -F "sound=$SOUND" ) ;;
|
||||||
|
f) HTML=1
|
||||||
|
ARGS+=( -F "html=$HTML" ) ;;
|
||||||
|
k) MONOSPACE=1
|
||||||
|
ARGS+=( -F "monospace=$MONOSPACE" ) ;;
|
||||||
|
r) [ ! -z $OPTARG ] && RETRY=$OPTARG ;;
|
||||||
|
e) [ ! -z $OPTARG ] && EXPIRE=$OPTARG ;;
|
||||||
|
d) DEVICE=$OPTARG
|
||||||
|
ARGS+=( -F "device=$DEVICE" ) ;;
|
||||||
|
i) IMAGE="$OPTARG"
|
||||||
|
ARGS+=( -F "attachment=@${IMAGE}" ) ;;
|
||||||
|
a)
|
||||||
|
APP_ID="$OPTARG"
|
||||||
|
;;
|
||||||
|
m)
|
||||||
|
if [[ -z $MESSAGE ]]
|
||||||
|
then
|
||||||
|
MESSAGE=$OPTARG
|
||||||
|
ARGS+=( -F "message=$MESSAGE" )
|
||||||
|
#ARGS+=( -F "message='$MESSAGE'" )
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
v) echo "Pushover shell script version ${VERSION}" && exit 1 ;;
|
||||||
|
x) DEBUG=1 ;;
|
||||||
|
:) echo "Option -$OPTARG requires an argument." >&2; exit 1 ;;
|
||||||
|
h) usage; exit 1 ;;
|
||||||
|
z) examples; exit 1 ;;
|
||||||
|
?) usage; exit ;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
# APP TOKEN
|
||||||
|
if [[ ! -z $APP_ID ]]
|
||||||
|
then
|
||||||
|
APP_ID=`echo $APP_ID | tr '[:lower:]' '[:upper:]'`
|
||||||
|
APP_NAME="${APP_ID}_TOKEN"
|
||||||
|
APP_TOKEN="${!APP_NAME}"
|
||||||
|
ARGS+=( -F "token=$APP_TOKEN" )
|
||||||
|
fi
|
||||||
|
|
||||||
|
# EMERGENCY PRIORITY
|
||||||
|
if [[ $PRIORITY == 2 ]]
|
||||||
|
then
|
||||||
|
ARGS+=( -F "retry=$RETRY" )
|
||||||
|
ARGS+=( -F "expire=$EXPIRE" )
|
||||||
|
fi
|
||||||
|
|
||||||
|
# REQUIRED FIELDS
|
||||||
|
if [[ -z $MESSAGE ]] || [[ -z $APP_TOKEN ]]
|
||||||
|
then
|
||||||
|
echo -e "\n\\033[31mMessage and Application token are required.\\033[0m"
|
||||||
|
usage
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
if [[ $HTML == 1 ]]
|
||||||
|
then
|
||||||
|
MESSAGE="'$MESSAGE'"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# DEBUG PRINT
|
||||||
|
if [[ $DEBUG == 1 ]]
|
||||||
|
then
|
||||||
|
echo "TITLE ...... $TITLE"
|
||||||
|
echo "DEVICE ..... $DEVICE"
|
||||||
|
echo "URL ........ ${URL} (${URL_TITLE})"
|
||||||
|
echo "FORMAT ..... HTML ${HTML} MONOSPACE ${MONOSPACE}"
|
||||||
|
echo "APP ........ ID:${APP_ID} TOKEN:${APP_TOKEN}"
|
||||||
|
echo "PRIORITY ... $PRIORITY"
|
||||||
|
if [[ $PRIORITY == 2 ]]
|
||||||
|
then
|
||||||
|
echo "RETRY ...... $RETRY"
|
||||||
|
echo "EXPIRE ..... $EXPIRE"
|
||||||
|
fi
|
||||||
|
echo "SOUND ...... $SOUND"
|
||||||
|
echo "IMAGE ..... $IMAGE"
|
||||||
|
echo "MESSAGE -----------------------------------------"
|
||||||
|
echo "${MESSAGE}"
|
||||||
|
echo "-------------------------------------------------"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# SEND NOTIFICATION
|
||||||
|
#curl -s "${ARGS[@]}" https://api.pushover.net/1/messages.json
|
||||||
|
echo "${ARGS[@]}"
|
||||||
Reference in New Issue
Block a user