diff --git a/modules/say/say.sh b/modules/say/say.sh index 703f391..11b8900 100755 --- a/modules/say/say.sh +++ b/modules/say/say.sh @@ -1,7 +1,62 @@ #!/usr/bin/env bash [ -f functions.sh ] && source functions.sh +# shellcheck source=/dev/null +[ -f bot.cfg ] && source bot.cfg -shift -chan="$1" -shift -msg "$chan" "$@" +userName="$1" +channelName="$2" +shift 2 + +# Check if there are any arguments +if [[ -z "$*" ]]; then + msg "$channelName" "$userName: Please provide a message to say." + exit 0 +fi + +# Ensure channels array is available +if [[ -z "${channels[*]}" ]]; then + msg "$channelName" "$userName: Configuration error - no channels configured." + exit 1 +fi + +# Check if invoked from a PM (channel name equals username) +if [[ "$channelName" == "$userName" ]]; then + # PM context: check if first argument is a channel name + firstArg="$1" + + # Check if first argument starts with # (explicit channel) + if [[ "$firstArg" =~ ^#[a-zA-Z0-9_-]+$ ]]; then + # Remove # prefix for comparison with configured channels + targetChannel="${firstArg#\#}" + + # Check if the bot is connected to this channel + isConnected=false + for configuredChannel in "${channels[@]}"; do + if [[ "$configuredChannel" == "$targetChannel" ]]; then + isConnected=true + break + fi + done + + if [[ "$isConnected" == "true" ]]; then + # Send message to specified channel + shift + if [[ -z "$*" ]]; then + msg "$userName" "Please provide a message to say in $firstArg." + else + msg "$firstArg" "$*" + fi + else + # Not connected to that channel + msg "$userName" "I am not connected to $firstArg." + fi + else + # No channel specified or doesn't start with #, broadcast to all channels + for configuredChannel in "${channels[@]}"; do + msg "#$configuredChannel" "$*" + done + fi +else + # Channel context: just say the message in the current channel + msg "$channelName" "$*" +fi