141 lines
4.9 KiB
Bash
Executable File
141 lines
4.9 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
if [ "$(whoami)" = "root" ]; then
|
|
echo "This bot should not be ran as root."
|
|
exit 1
|
|
fi
|
|
[ -f functions.sh ] && source functions.sh
|
|
[ -f bot.cfg ] && source bot.cfg
|
|
input=".botinput"
|
|
|
|
close_bot() {
|
|
echo -en "QUIT :${quitMessage}\r\n" | telnet "$server" "$port"
|
|
rm "$input"
|
|
exit 0
|
|
}
|
|
|
|
trap close_bot EXIT $?
|
|
|
|
echo "Session started $(date "+%I:%M%p%n %A, %B %d, %Y")" | tee "$log"
|
|
echo "NICK $nick" > "$input"
|
|
echo "USER $user" >> "$input"
|
|
echo "JOIN #$channel" >> "$input"
|
|
|
|
tail -f "$input" | telnet "$server" "$port" | while read -r result ; do
|
|
# log the session
|
|
echo "$(date "+[$dateFormat]") $result" >> "$log"
|
|
# do things when you see output
|
|
case "$result" in
|
|
# respond to ping requests from the server
|
|
PING*)
|
|
echo "${result/I/O}" >> "$input"
|
|
;;
|
|
# for pings on nick/user
|
|
*"You have not"*)
|
|
echo "JOIN #$channel" | tee -a "$input"
|
|
;;
|
|
# Run on kick
|
|
:*!*@*" KICK "*" $nick :"*)
|
|
if [ "$autoRejoinChannel" = "true" ]; then
|
|
echo "JOIN #$channel" | tee -a "$input"
|
|
fi
|
|
if [ "$curseKicker" = "true" ]; then
|
|
kickerName="${result%!*}"
|
|
kickerName="${kickerName:1}"
|
|
kickerChannel="${result##*#}"
|
|
kickerChannel="#${kickerChannel%% *}"
|
|
msg "$kickerChannel" "$kickerName: $(shuf -e -n1 "fuck you" "go fuck yourself")!"
|
|
fi
|
|
;;
|
|
# run when someone joins
|
|
*"JOIN :#"*)
|
|
who="${result%%!*}"
|
|
who="${who:1}"
|
|
from="${result#*#}"
|
|
from="#$from"
|
|
if [ "$who" = "$nick" ]; then
|
|
continue
|
|
fi
|
|
echo "MODE #$channel +o $who" | tee -a "$input"
|
|
if [ "${greet^^}" = "TRUE" ]; then
|
|
set -f
|
|
./triggers/greet/greet.sh "$who" "$from"
|
|
set +f
|
|
fi
|
|
;;
|
|
# run when someone leaves
|
|
*"PART #"*)
|
|
who="${result%%!*}"
|
|
who="${who:1}"
|
|
from="${result#*#}"
|
|
from="#$from"
|
|
if [ "$who" = "$nick" ]; then
|
|
continue
|
|
fi
|
|
if [ "${leave^^}" = "TRUE" ]; then
|
|
set -f
|
|
./triggers/bye/bye.sh "$who" "$from"
|
|
set +f
|
|
fi
|
|
;;
|
|
# run when a private message is seen
|
|
*"PRIVMSG "[[:alnum:]-_]*)
|
|
echo "$result" >> "$log"
|
|
who="${result%%!*}"
|
|
who="${who:1}"
|
|
from="${who%!*}"
|
|
command="${result#:* PRIVMSG [[:alnum:]_-]*:}"
|
|
command="${command//# /}"
|
|
will="${command#* }"
|
|
command="${command%% *}"
|
|
if [[ "$from" =~ $allowList ]]; then
|
|
./modules/say/say.sh "$who" "#$channel" $from really loves me, they sent me a private message saying $command $will
|
|
else
|
|
reply "$who" "You are not in the allowed list for this bot. If you think this is an error, please contact the bot's administrator."
|
|
fi
|
|
;;
|
|
# run when a message is seen
|
|
*PRIVMSG*)
|
|
echo "$result" >> "$log"
|
|
who="${result%%!*}"
|
|
who="${who:1}"
|
|
from="${result#*#}"
|
|
from="${from%% *}"
|
|
from="#${from:-$channel}"
|
|
# Trigger stuff happens here.
|
|
# Call link trigger if msg contains a link:
|
|
if [[ "$result" =~ .*http://|https://|www\..* ]]; then
|
|
set -f
|
|
echo "Calling link.sh with \"$who\" \"$from\" \"$result\"" >> "$log"
|
|
./triggers/link/link.sh "$who" "$from" "$result"
|
|
set -f
|
|
# Although this calls modules, it triggers on text other than the bot's nick
|
|
elif [[ "$result" =~ ^.*PRIVMSG.*:[${botCaller}].* ]]; then
|
|
command="${result#*:[[:punct:]]}"
|
|
command="${command//# /}"
|
|
will="${command#* }"
|
|
command="${command%% *}"
|
|
if command -v "./modules/${command% *}/${command% *}.sh" ; then
|
|
echo "Calling module ./modules/${command% *}/${command% *}/${command% *}.sh \"$who\" \"$from\" $will" >> "$log"
|
|
# Disable wildcards
|
|
set -f
|
|
./modules/${command% *}/${command% *}.sh "$who" "$from" $will
|
|
# Enable wildcards
|
|
set +f
|
|
else
|
|
./modules/say/say.sh "$who" "$from" "$who: $(shuf -n1 "response/error.txt")"
|
|
fi
|
|
else
|
|
if ! [[ "$who" =~ $ignoreList ]]; then
|
|
set -f
|
|
./triggers/keywords/keywords.sh "$who" "$from" "$result"
|
|
set +f
|
|
fi
|
|
fi
|
|
;;
|
|
*)
|
|
echo "$result" >> "$log"
|
|
;;
|
|
esac
|
|
done
|