#! /bin/sh # $OpenBSD: irc,v 1.2 2001/01/29 01:58:12 niklas Exp $ ## Shit-simple script to supply the "privmsg " of IRC typein, and ## keep the connection alive. Pipe this thru "nc -v -w 5 irc-server port". ## Note that this mechanism makes the script easy to debug without being live, ## since it just echoes everything bound for the server. ## if you want autologin-type stuff, construct some appropriate files and ## shovel them in using the "<" mechanism. # magic arg: if "tick", do keepalive process instead of main loop if test "$1" = "tick" ; then # ignore most signals; the parent will nuke the kid # doesn't stop ^Z, of course. trap '' 1 2 3 13 14 15 16 while true ; do sleep 60 echo "PONG !" done fi # top level: fire ourselves off as the keepalive process, and keep track of it sh $0 tick & ircpp=$! echo "[Keepalive: $ircpp]" >&2 # catch our own batch of signals: hup int quit pipe alrm term urg trap 'kill -9 $ircpp ; exit 0' 1 2 3 13 14 15 16 sleep 2 sender='' savecmd='' # the big honkin' loop... while read xx yy ; do case "${xx}" in # blank line: do nothing "") continue ;; # new channel or recipient; if bare ">", we're back to raw literal mode. ">") if test "${yy}" ; then sender="privmsg ${yy} :" else sender='' fi continue ;; # send crud from a file, one line per second. Can you say "skr1pt kidz"?? # *Note: uses current "recipient" if set. "<") if test -f "${yy}" ; then ( while read zz ; do sleep 1 echo "${sender}${zz}" done ) < "$yy" echo "[done]" >&2 else echo "[File $yy not found]" >&2 fi continue ;; # do and save a single command, for quick repeat "/") if test "${yy}" ; then savecmd="${yy}" fi echo "${savecmd}" ;; # default case goes to recipient, just like always *) echo "${sender}${xx} ${yy}" continue ;; esac done # parting shot, if you want it echo "quit :Bye all!" kill -9 $ircpp exit 0