#!/bin/bash # notify.sh — send a notification via ntfy, email, and/or Mattermost. # # Usage: notify.sh "Title" "Body message" # # Reads notify_config.txt from the same directory as this script. # All methods are independently enabled/disabled in the config. # Exits 0 even if all methods fail (notifications are best-effort). set -euo pipefail SCRIPT_DIR="$(dirname "$(realpath "$0")")" CONFIG="$SCRIPT_DIR/sky-cam.conf" TITLE="${1:-Sky-Cam notification}" BODY="${2:-}" # ── Load config ─────────────────────────────────────────────────────────────── if [ ! -f "$CONFIG" ]; then echo "notify.sh: sky-cam.conf not found — skipping notifications" >&2 exit 0 fi source "$CONFIG" source "$SCRIPT_DIR/.env" 2>/dev/null || true NTFY_ENABLED="${NTFY_ENABLED:-false}" NTFY_URL="${NTFY_URL:-}" EMAIL_ENABLED="${EMAIL_ENABLED:-false}" EMAIL_TO="${EMAIL_TO:-}" EMAIL_FROM="${EMAIL_FROM:-skycam@localhost}" MM_NOTIFY_ENABLED="${MM_NOTIFY_ENABLED:-false}" MM_NOTIFY_CHANNEL_ID="${MM_NOTIFY_CHANNEL_ID:-}" # ── ntfy ───────────────────────────────────────────────────────────────────── if [ "$NTFY_ENABLED" = "true" ] && [ -n "$NTFY_URL" ]; then curl -s \ -H "Title: $TITLE" \ -d "$BODY" \ "$NTFY_URL" > /dev/null \ && echo "notify: ntfy sent" \ || echo "notify: ntfy failed" >&2 fi # ── Email ───────────────────────────────────────────────────────────────────── if [ "$EMAIL_ENABLED" = "true" ] && [ -n "$EMAIL_TO" ]; then echo "$BODY" | mail -s "$TITLE" -r "$EMAIL_FROM" "$EMAIL_TO" \ && echo "notify: email sent to $EMAIL_TO" \ || echo "notify: email failed" >&2 fi # ── Mattermost text post ────────────────────────────────────────────────────── # mattermost_url and access_token come from sky-cam.conf (sourced above). if [ "$MM_NOTIFY_ENABLED" = "true" ] && [ -n "$MM_NOTIFY_CHANNEL_ID" ] && [ -n "${mattermost_url:-}" ] && [ -n "${access_token:-}" ]; then curl -s \ -H "Authorization: Bearer $access_token" \ -H "Content-Type: application/json" \ -d "{\"channel_id\":\"$MM_NOTIFY_CHANNEL_ID\",\"message\":\"**$TITLE**\n$BODY\"}" \ "${mattermost_url}/api/v4/posts" > /dev/null \ && echo "notify: mattermost sent" \ || echo "notify: mattermost failed" >&2 fi exit 0