#!/usr/bin/env bash [ -f functions.sh ] && source functions.sh farewellsFile="triggers/bye/farewells.txt" # Time tracking to prevent spam from flaky connections # Track last bye time for each user (in seconds since epoch) declare -A lastByeTime # Only say bye if user hasn't been farewelled in the last hour (3600 seconds) currentTime=$(date +%s) userName="${1,,}" cooldownPeriod=3600 if [[ -n "${lastByeTime[$userName]}" ]]; then timeSinceLastBye=$((currentTime - lastByeTime[$userName])) if [[ $timeSinceLastBye -lt $cooldownPeriod ]]; then # User was farewelled recently, skip bye message exit 0 fi fi # Update last bye time for this user lastByeTime[$userName]=$currentTime # 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