dwww Home | Show directory contents | Find package

#! /bin/sh
## Shit-simple script to supply the "privmsg <recipient>" 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

Generated by dwww version 1.15 on Sat Jun 29 00:02:05 CEST 2024.