]> Pileus Git - ~andy/rhawk/blob - rhawk
email
[~andy/rhawk] / rhawk
1 #!awk -f
2
3 @include "irc.awk"
4 @include "spades.awk"
5 @include "email.awk"
6
7 # Initialization
8 BEGIN {
9         OWNER = "andy753421"
10         connect("localhost", "rhawk", "#rhtest");
11         join("#rhnoise")
12         join("#rhspades")
13         join("#sfvlug")
14 }
15
16 # Admin
17 FROM == OWNER && TO == NICK && /^die in a fire/ {
18         say("Ack, argh, barasdjf..")
19         quit()
20 }
21
22 FROM == OWNER && TO == NICK && /^reload/ {
23         say("Reloading..")
24         reload()
25 }
26
27 FROM == OWNER && TO == NICK && /^rejoin/ {
28         reply("joining..")
29         join("#rhnoise")
30         next
31 }
32
33 FROM == OWNER && TO == NICK && /^(join|part)/ {
34         match(MSG, /(join|part) +(#+\w+)/, arr)
35         if (arr[1] && arr[2]) {
36                 send(toupper(arr[1]) " " arr[2]);
37                 next
38         }
39 }
40
41 FROM == OWNER && TO == NICK && /^\.msg/ {
42         match(MSG, /.*\.msg +(#*\w+) +(.*)/, arr)
43         send("PRIVMSG " arr[1] " :" arr[2])
44 }
45
46 # Kick handling
47 CMD == "KICK" && ARG == NICK {
48         kick_delay = (kick_delay + 2) * 2
49         system("sleep " kick_delay)
50         join(DST)
51         reply("I feel happy!")
52 }
53
54 # Identify bots
55 FROM ~ /bo+t$|rhnoise/ {
56         bots[FROM] = 1
57 }
58
59 CMD == "NICK" && FROM in bots {
60         bots[MSG] = FROM
61 }
62
63
64 # Unicode
65 /[Uu]nicode :-?\(/ {
66         plain[FROM] = 1
67 }
68
69 /[Uu]nicode :-?\)/ {
70         plain[FROM] = 0
71 }
72
73 # SFV Lug
74 BEGIN { pollchan = "#sfvlug" }
75 (CMD == "PING"    && systime()-lastpoll > 60*60*24) ||
76 (CMD == "PRIVMSG" && DST == pollchan && /^\.poll/) {
77         if (!topics[pollchan]) {
78                 debug("Unknown topic for " pollchan);
79                 next
80         }
81         cmd = "curl -s http://sfvlug.org/"
82         day = "(Sun|Mon|Tue|Wed|Thu|Fri|Sat)"
83         web = "next meeting.*" day "\\w+[, ]+([A-Z]\\w+) +([0-9]+)[, ]+([0-9]+)"
84         irc = day "\\w*[, ]+([A-Z]\\w+) +([0-9]+)"
85         while (cmd | getline line) {
86                 if (match(line, web, arr)) {
87                         new = arr[1] " " arr[2] " " arr[3]
88                         sub(irc, new, topics[pollchan])
89                         topic(pollchan, topics[pollchan])
90                         break
91                 }
92         }
93         lastpoll = systime()
94         close(cmd)
95 }
96
97 # Fortune
98 TO == NICK && /^/               { extra = ""   }
99 TO == NICK && /^\.?fortune.*-o/ { extra = "-o" }
100 TO == NICK && /^\.?fortune/     {
101         gsub(/.*\.?fortune *|-[a-z]* *|[^a-zA-Z0-9 ]/, "", MSG)
102         cmd = "fortune " extra " " (MSG ? "-m '" MSG "'" : "-s")
103         _lines = 0
104         while (cmd | getline _fortune && _lines < 5) {
105                 say(_fortune)
106                 _lines++
107         }
108         close(cmd)
109         next
110 }
111
112 # Noise
113 FROM ~ OWNER && /^go go gadget woop/ {
114         for (i=20; i>0; i--)
115                 say(".delay " i " seconds; .woop " i)
116 }
117
118 TO == NICK && /^[Ww][Oo]+[Pp]/ {
119         gsub(/[^Oo]/, "", $1)
120         _len = length($1)
121         if (_len == 2)
122                 _len = 10
123         _woop = "WOOP"
124         for (i=1; i<_len; i++)
125                 _woop = _woop " WOOP"
126         say(_woop)
127 }
128
129 TO == NICK && DST ~ /^#/ {
130         #say("Hello, " FROM)
131 }
132
133 !(FROM in bots) &&
134 MSG !~ /^\./ &&
135 /awk/ {
136         say("Awk, awk, awk! I'm a bird!")
137 }
138
139 !(FROM in bots) &&
140 /^[^.](help|halp)/ {
141         reply("Nothing can help you now..")
142 }
143
144 /Ho.*Ho.*Ho/ {
145         say("\00309Merry \00304Christmas!")
146 }
147
148 { fflush("") }
149
150 # vim: ft=awk