#!/usr/bin/env bash [ -f functions.sh ] && source functions.sh userNick="$1" chan="$2" # $3 contains the entire argument string (e.g., "30s hello world") # We need to split it into time and message # shellcheck disable=SC2086 set -- $3 # Intentionally unquoted to split into separate words time="$1" shift # Validate time argument is provided if [[ -z "$time" ]]; then msg "$chan" "$userNick: Please provide a time (e.g., 30s, 5m, 1h)." exit 0 fi # Normalize time format - add 's' suffix if no time unit specified if ! [[ "$time" =~ ^[0-9]+[HhMmSs]$ ]]; then # Check if it's just a number without a unit if [[ "$time" =~ ^[0-9]+$ ]]; then time="${time}s" else msg "$chan" "$userNick: Time must be numeric (e.g., 30s, 5m, 1h)." exit 0 fi fi # Validate time is reasonable (max 24 hours) timeValue="${time%[HhMmSs]}" timeUnit="${time: -1}" case "${timeUnit,,}" in h) maxTime=24; timeInSeconds=$((timeValue * 3600)) ;; m) maxTime=1440; timeInSeconds=$((timeValue * 60)) ;; s) maxTime=86400; timeInSeconds=$timeValue ;; *) maxTime=86400; timeInSeconds=$timeValue ;; esac if [[ $timeValue -gt $maxTime ]]; then msg "$chan" "$userNick: Maximum time is 24 hours." exit 0 fi # Validate reminder message is provided if [[ -z "$*" ]]; then msg "$chan" "$userNick: Please provide a reminder message." exit 0 fi # Convert message to array for easier parsing # shellcheck disable=SC2206 msgArray=($*) targetNick="$userNick" # Default target is the person who set the reminder # Handle 'tell' syntax for targeting other users if [[ "${msgArray[0],,}" == "tell" ]]; then # Extract target nickname (second element, strip trailing punctuation) extractedNick="${msgArray[1]}" extractedNick="${extractedNick%:}" extractedNick="${extractedNick%,}" # Set target and rebuild message without "tell nickname" targetNick="$extractedNick" # Rebuild message from element 2 onward reminderMessage="${msgArray[*]:2}" else reminderMessage="$*" fi msg "$chan" "ok, $userNick, reminder in $time." sleep "$timeInSeconds" && msg "$chan" "$targetNick: $reminderMessage" &