#!/bin/bash # connects to the hedgewars server and lists all players # that match the grep flags/regexp given as arguments # # written by sheepluva # version 1.1 # config SERVER=netserver.hedgewars.org PROTO=47 #variables ME="bot$(date +%s)" MD5=passwordhash INPIPE="/tmp/hwin$ME" OUTFILE="/tmp/hwout$ME" mkfifo "$INPIPE" rm -f "$OUTFILE" touch "$OUTFILE" # establish connection to server tail -f --pid=$$ "$INPIPE" | nc $SERVER 46631 >> "$OUTFILE" & CHILD=$! echo "NICK $ME PROTO $PROTO " >> "$INPIPE" & trap "{ echo 'QUIT ' >> ${INPIPE}; sleep 1; kill $! 2> /dev/null; rm -f ${INPIPE} ${OUTFILE}; exit; }" SIGINT SIGTERM CMD='' tail -f --pid=$CHILD "$OUTFILE" | while read LINE do if [[ $CMD == '' ]]; then CMD="$LINE" #echo $CMD if [[ "$CMD" == 'ASKPASSWORD' ]]; then echo -e "PASSWORD\n$MD5\n" >> "$INPIPE"; fi if [[ "$CMD" == "PING" ]]; then echo -e "PONG\n" >> "$INPIPE"; fi else if [[ "$CMD" == 'BYE' ]]; then echo "Connection closed by Server: $LINE" 1>&2; rm "$OUTFILE"; break; fi if [[ "$LINE" == '' ]]; then if [[ "$CMD" == 'LOBBY:JOINED' ]]; then break; fi CMD='' fi if [[ "$CMD" == 'LOBBY:JOINED' ]]; then echo -e "INFO\n$LINE\n" >> "$INPIPE"; fi fi done echo 'QUIT My work is done here, bye. ' >> "$INPIPE" & if [ -f "$OUTFILE" ]; then sleep 0.2 kill $CHILD 2> /dev/null if [ "$1" != "x$1" ] then grep -E -B 3 -A 3 "$@" "$OUTFILE" | grep -B 1 -A 2 "\[[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*\]" else grep -B 1 -A 2 "\[[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*\]" "$OUTFILE" fi fi #rm -f "$INPIPE" "$OUTFILE" rm -f "$INPIPE"