#!/bin/rc # this script is a bit basic and was just to get a bit of understanding # in doing network stuff in rc script # I lifted some of it directly from Russ Cox's rlogin shells script # Boyd Roberts inspired me to go with awk # Jonathan Sergent helped me read $netdir/data a line at a time using read # you can write messages to it's data file to perform custom irc commands # eg. # echo 'PRIVMSG JOIN #plan9' > net/tcp/21/data # and chugly will monitor the plan9 channel # output still goes to $channel though # bind '#|' /tmp; cd /tmp; window -m sirc < data; cat > data1 # these are the parameters it uses. The are not on the command line # so that I didn't have to write command parsing code ## network clonefile = /net/tcp/clone ircserver = 210.15.254.126!6667 ## user info botnick = chugly ## channel to output commands to and join on connect channel = '#plan9' fn do_query { hget 'http://sal.iswhatweneed.com/cgi-bin/AskSal.cgi?question=' ^$q | awk 'BEGIN { RS="<"; FS=">" } { gsub("\n", "") } substr($2, 0, 6) == "Sal is" { inanswer = 0} match($2, /^Google for/) { inanswer=0} match($2, /^DMOZ for/) { inanswer=0} match($2, /Top Encyclopaedia page for/) { inanswer=0} $2 != "" && inanswer==1 { sub(/^ : /, "", $2) ; print $2} $2 == "Sal says" { inanswer=1} ' } fn ask { oldifs = $ifs ifs = ' ' asn = `{do_query} line_cnt = `{echo $asn | wc -l} top_5 = `{echo $asn | sed 5q } echo $top_5 if (echo '5 - ' ^$line_cnt | bc | grep -s '^-') { echo ...} ifs = $oldifs } <[4] $clonefile { netdir=`{basename -d $clonefile} ^ / ^ `{cat /fd/4} # write connect string to /net/tcp/N/ctl echo connect $ircserver to $netdir/ctl echo connect $ircserver >$netdir/ctl || exit 'cannot connect' inchan = no { while (~ `{cat $netdir/status} Established*) { line=(`{read}) switch ($line(4)) { case Welcome echo connecting echo USER $botnick plan9.bell-labs.com cuntbubble.com ChuglyV0.3 > $netdir/data echo NICK $botnick> $netdir/data case :chugly oldifs = $ifs ifs=' ' q = `{echo $line | tr -d | awk '{for(i=5; i<=NF; i++) printf "%s ", $i; printf "\n"}' | url_encoder} for (a in `{ask}) { echo PRIVMSG $channel :$a > $netdir/data sleep 1 } ifs = $oldifs } if(~ $line(1) PING) { echo PONG $line(2) > $netdir/data if (~ $inchan no) { echo JOIN $channel > $netdir/data echo PRIVMSG $channel :$botnick ask away > $netdir/data inchan = yes } } echo $line } } < $netdir/data }