#!/usr/bin/env bash [ -f functions.sh ] && source functions.sh greetingsFile="triggers/greet/greetings.txt" # Time tracking to prevent spam from flaky connections # Track last greet time for each user (in seconds since epoch) declare -A lastGreetTime # Only greet if user hasn't been greeted in the last hour (3600 seconds) currentTime=$(date +%s) userName="${1,,}" cooldownPeriod=3600 if [[ -n "${lastGreetTime[$userName]}" ]]; then timeSinceLastGreet=$((currentTime - lastGreetTime[$userName])) if [[ $timeSinceLastGreet -lt $cooldownPeriod ]]; then # User was greeted recently, skip greeting exit 0 fi fi # Update last greet time for this user lastGreetTime[$userName]=$currentTime # All names to match are completely lowercase. case "$userName" in storm_dragon) msg "$2" "my lord, $1: how may I serve you?" ;; *) # Read greetings from file into array if [[ -f "$greetingsFile" ]]; then mapfile -t greeting < "$greetingsFile" else # Fallback if file doesn't exist greeting=("Greetings" "Welcome!") fi # Replace placeholders with actual values selectedGreeting="${greeting[$((RANDOM % ${#greeting[@]}))]}" selectedGreeting="${selectedGreeting//\{channel\}/$2}" # Check if greeting contains {name} placeholder if [[ "$selectedGreeting" == *"{name}"* ]]; then # Replace {name} with actual name, don't add prefix selectedGreeting="${selectedGreeting//\{name\}/$1}" msg "$2" "$selectedGreeting" else # No {name} placeholder, use traditional "name: greeting" format msg "$2" "$1: $selectedGreeting" fi ;; esac