IRC Bot in bash

Aus revampedia
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Hier noch ein IRC Bot in _bash_, von Robin.

Es verwendet das Kommandozeilen tool: ii

#!/bin/bash

trap 'kill $(jobs -p) &> /dev/null ; exit 23' SIGINT SIGTERM

BASEDIR="$(dirname $0)"
USERNAME="Hodorbot"
REALNAME="Hodor"
SERVER="irc.freenode.net"
CHANNEL="#revamp"
#CHANNEL="#ubunteros.ch"

STRING="hodor"
STRINGFILE="$BASEDIR/hodor.txt"
OUTFILE="$BASEDIR/$SERVER/$CHANNEL/out"
INFILE="$BASEDIR/$SERVER/$CHANNEL/in"

hodor_func (){
	while kill -s 0 "$IIPID"
	do
		sleep 0.1
		NUMOFLINES=$(wc -l $OUTFILE | cut -d" " -f1)
		if [[ -z "$LINESTART" ]]
		then
			LINESTART="$NUMOFLINES"
		fi
		if [[ "$NUMOFLINES" -gt "$LINESTART" ]]
		then
			let LINESTART++
			LINESTRING=$(awk "NR==$LINESTART, NR==$NUMOFLINES" $OUTFILE)
#			echo "$LINESTRING"
			USER="$(echo $LINESTRING | cut -d " " -f3 | sed -e "s/<//" -e "s/>//")"
			MESSAGE="$(echo $LINESTRING | cut -d " " -f4- | tr '[:upper:]' '[:lower:]')"

			if ! [[ "$USER" = "$USERNAME" ]]
			then
#				echo "$MESSAGE"
				case "$MESSAGE" in
					*"${USERNAME,,}"*)
						if echo "$MESSAGE" | grep -qi "help"
						then
							echo "$USER: Hodor while hodoring" > "$INFILE"
						else
							echo "$USER: $(shuf -n 1 "$STRINGFILE")" > "$INFILE"
						fi
					;;
					*"$STRING"*)
						shuf -n 1 "$STRINGFILE" > "$INFILE"
					;;
				esac
#				echo "$MESSAGE" > "$INFILE"
			fi
		fi
	done
}

while true
do
	ii -s "$SERVER" -i "./" -n "$USERNAME" -f "$REALNAME" &
	IIPID="$!"
	sleep 5
	echo "/j $CHANNEL" > "$BASEDIR/$SERVER/in"
	hodor_func
	wait "$IIPID"
done