74 lines
2.1 KiB
Bash
Executable File
74 lines
2.1 KiB
Bash
Executable File
#!/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" &
|