diff --git a/modules/reminder/reminder.sh b/modules/reminder/reminder.sh index 0233c86..6be144a 100755 --- a/modules/reminder/reminder.sh +++ b/modules/reminder/reminder.sh @@ -2,9 +2,11 @@ [ -f functions.sh ] && source functions.sh userNick="$1" -shift -chan="$1" -shift +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 @@ -46,18 +48,26 @@ if [[ -z "$*" ]]; then exit 0 fi -msg "$chan" "ok, $userNick, reminder in $time." -reminderMessage="$*" +# 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 [[ "$reminderMessage" =~ ^[Tt]ell[[:space:]]+ ]]; then - targetNick="$(echo "${reminderMessage#[T|t]ell }" | cut -d ' ' -f1)" - # Validate nick doesn't contain invalid characters - if [[ "$targetNick" =~ ^[a-zA-Z0-9_\[\]\{\}\\|\`\^\-]+$ ]]; then - userNick="$targetNick" - reminderMessage="${reminderMessage#[Tt]ell }" - reminderMessage="${reminderMessage#* }" - fi +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 -sleep "$timeInSeconds" && msg "$chan" "$userNick: $reminderMessage" & +msg "$chan" "ok, $userNick, reminder in $time." + +sleep "$timeInSeconds" && msg "$chan" "$targetNick: $reminderMessage" &