Files
stormbot/triggers/greet/greet.sh

55 lines
1.5 KiB
Bash
Executable File

#!/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