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

58 lines
1.7 KiB
Bash
Executable File

#!/usr/bin/env bash
[ -f functions.sh ] && source functions.sh
farewellsFile="triggers/bye/farewells.txt"
byeTrackingDir="/tmp/stormbot_bye"
# Time tracking to prevent spam from flaky connections
# Create tracking directory if it doesn't exist
mkdir -p "$byeTrackingDir"
# Only say bye if user hasn't been farewelled in the last hour (3600 seconds)
currentTime=$(date +%s)
userName="${1,,}"
cooldownPeriod=3600
userTrackingFile="$byeTrackingDir/$userName"
if [[ -f "$userTrackingFile" ]]; then
lastByeTime=$(cat "$userTrackingFile")
timeSinceLastBye=$((currentTime - lastByeTime))
if [[ $timeSinceLastBye -lt $cooldownPeriod ]]; then
# User was farewelled recently, skip bye message
exit 0
fi
fi
# Update last bye time for this user
echo "$currentTime" > "$userTrackingFile"
# All names to match are completely lowercase.
case "$userName" in
storm_dragon)
msg "${2%% :*}" "NOOOOOOOOOO!!! $1: come back!!!"
;;
*)
# Read farewells from file into array
if [[ -f "$farewellsFile" ]]; then
mapfile -t farewell < "$farewellsFile"
else
# Fallback if file doesn't exist
farewell=("Goodbye" "Farewell!")
fi
# Replace placeholders with actual values
selectedFarewell="${farewell[$((RANDOM % ${#farewell[@]}))]}"
selectedFarewell="${selectedFarewell//\{channel\}/${2%% :*}}"
# Check if farewell contains {name} placeholder
if [[ "$selectedFarewell" == *"{name}"* ]]; then
# Replace {name} with actual name, don't add prefix
selectedFarewell="${selectedFarewell//\{name\}/$1}"
msg "${2%% :*}" "$selectedFarewell"
else
# No {name} placeholder, use traditional "name: farewell" format
msg "${2%% :*}" "$1: $selectedFarewell"
fi
;;
esac