• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#! /bin/sh
2## Shit-simple script to supply the "privmsg <recipient>" of IRC typein, and
3## keep the connection alive.  Pipe this thru "nc -v -w 5 irc-server port".
4## Note that this mechanism makes the script easy to debug without being live,
5## since it just echoes everything bound for the server.
6## if you want autologin-type stuff, construct some appropriate files and
7## shovel them in using the "<" mechanism.
8
9# magic arg: if "tick", do keepalive process instead of main loop
10if test "$1" = "tick" ; then
11# ignore most signals; the parent will nuke the kid
12# doesn't stop ^Z, of course.
13  trap '' 1 2 3 13 14 15 16
14  while true ; do
15    sleep 60
16    echo "PONG !"
17  done
18fi
19
20# top level: fire ourselves off as the keepalive process, and keep track of it
21sh $0 tick &
22ircpp=$!
23echo "[Keepalive: $ircpp]" >&2
24# catch our own batch of signals: hup int quit pipe alrm term urg
25trap 'kill -9 $ircpp ; exit 0' 1 2 3 13 14 15 16
26sleep 2
27
28sender=''
29savecmd=''
30
31# the big honkin' loop...
32while read xx yy ; do
33  case "${xx}" in
34# blank line: do nothing
35    "")
36	continue
37    ;;
38# new channel or recipient; if bare ">", we're back to raw literal mode.
39    ">")
40	if test "${yy}" ; then
41	  sender="privmsg ${yy} :"
42	else
43	  sender=''
44	fi
45	continue
46    ;;
47# send crud from a file, one line per second.  Can you say "skr1pt kidz"??
48# *Note: uses current "recipient" if set.
49    "<")
50	if test -f "${yy}" ; then
51	  ( while read zz ; do
52	    sleep 1
53	    echo "${sender}${zz}"
54	  done ) < "$yy"
55	  echo "[done]" >&2
56	else
57	  echo "[File $yy not found]" >&2
58	fi
59	continue
60    ;;
61# do and save a single command, for quick repeat
62    "/")
63	if test "${yy}" ; then
64	  savecmd="${yy}"
65	fi
66	echo "${savecmd}"
67    ;;
68# default case goes to recipient, just like always
69    *)
70	echo "${sender}${xx} ${yy}"
71	continue
72    ;;
73  esac
74done
75
76# parting shot, if you want it
77echo "quit :Bye all!"
78kill -9 $ircpp
79exit 0
80