diff options
Diffstat (limited to 'src/usr.bin/nc/scripts/irc')
-rw-r--r-- | src/usr.bin/nc/scripts/irc | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/src/usr.bin/nc/scripts/irc b/src/usr.bin/nc/scripts/irc new file mode 100644 index 0000000000..3557d7a0c6 --- /dev/null +++ b/src/usr.bin/nc/scripts/irc | |||
@@ -0,0 +1,79 @@ | |||
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 | ||
10 | if 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 | ||
18 | fi | ||
19 | |||
20 | # top level: fire ourselves off as the keepalive process, and keep track of it | ||
21 | sh $0 tick & | ||
22 | ircpp=$! | ||
23 | echo "[Keepalive: $ircpp]" >&2 | ||
24 | # catch our own batch of signals: hup int quit pipe alrm term urg | ||
25 | trap 'kill -9 $ircpp ; exit 0' 1 2 3 13 14 15 16 | ||
26 | sleep 2 | ||
27 | |||
28 | sender='' | ||
29 | savecmd='' | ||
30 | |||
31 | # the big honkin' loop... | ||
32 | while 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 | ||
74 | done | ||
75 | |||
76 | # parting shot, if you want it | ||
77 | echo "quit :Bye all!" | ||
78 | kill -9 $ircpp | ||
79 | exit 0 | ||