Files
stormbot/triggers/greet/greet.sh
2025-11-14 18:33:30 -05:00

58 lines
1.6 KiB
Bash
Executable File

#!/usr/bin/env bash
[ -f functions.sh ] && source functions.sh
greetingsFile="triggers/greet/greetings.txt"
greetTrackingDir="/tmp/stormbot_greet"
# Time tracking to prevent spam from flaky connections
# Create tracking directory if it doesn't exist
mkdir -p "$greetTrackingDir"
# Only greet if user hasn't been greeted in the last hour (3600 seconds)
currentTime=$(date +%s)
userName="${1,,}"
cooldownPeriod=3600
userTrackingFile="$greetTrackingDir/$userName"
if [[ -f "$userTrackingFile" ]]; then
lastGreetTime=$(cat "$userTrackingFile")
timeSinceLastGreet=$((currentTime - lastGreetTime))
if [[ $timeSinceLastGreet -lt $cooldownPeriod ]]; then
# User was greeted recently, skip greeting
exit 0
fi
fi
# Update last greet time for this user
echo "$currentTime" > "$userTrackingFile"
# 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