55 lines
1.5 KiB
Bash
Executable File
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
|