diff --git a/modules/say/say.sh b/modules/say/say.sh index 9673824..c08d665 100755 --- a/modules/say/say.sh +++ b/modules/say/say.sh @@ -28,38 +28,39 @@ if [[ "$channelName" == "$userName" ]]; then firstArg="$1" echo "DEBUG say.sh: PM context detected, firstArg='$firstArg'" >> "$log" - # Check if first argument starts with # (explicit channel) - # IRC channels can contain: alphanumeric, -, _, and some special chars - if [[ "$firstArg" =~ ^#[a-zA-Z0-9_-]+$ ]]; then - # Remove # prefix for comparison with configured channels - targetChannel="${firstArg#\#}" + # Note: bot.sh strips "# " from commands, so #channel becomes just channel name + # Check if first argument looks like a channel name (matches configured channels) + isConnected=false + targetChannel="" - # 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 + for configuredChannel in "${channels[@]}"; do + if [[ "$firstArg" == "$configuredChannel" ]]; then + isConnected=true + targetChannel="$configuredChannel" + 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 + if [[ "$isConnected" == "true" ]]; then + # First arg is a known channel, send message there + shift + if [[ -z "$*" ]]; then + msg "$userName" "Please provide a message to say in #$targetChannel." else - # Not connected to that channel - msg "$userName" "I am not connected to $firstArg." + msg "#$targetChannel" "$*" fi else - # No channel specified or doesn't start with #, broadcast to all channels - for configuredChannel in "${channels[@]}"; do - msg "#$configuredChannel" "$*" - done + # Check if first arg looks like it could be a channel name (not in our list) + # If it contains no spaces and looks channel-ish, assume user specified wrong channel + if [[ "$firstArg" =~ ^[a-zA-Z0-9_-]+$ ]] && [[ ! "$firstArg" =~ [[:space:]] ]]; then + # Looks like a channel name but we're not connected + msg "$userName" "I am not connected to #$firstArg." + else + # No channel specified, broadcast to all channels + for configuredChannel in "${channels[@]}"; do + msg "#$configuredChannel" "$*" + done + fi fi else # Channel context: just say the message in the current channel