]> Pileus Git - ~andy/rhawk/blob - rhawk
Add version command
[~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         if (FIRST) {
12                 join("#rhnoise")
13                 join("#rhspades")
14                 join("#sfvlug")
15         }
16 }
17
18 # Admin
19 FROM == OWNER && TO == NICK && /^die in a fire/ {
20         say("Ack, argh, barasdjf..")
21         quit()
22 }
23
24 FROM == OWNER && TO == NICK && /^reload/ {
25         say("Reloading..")
26         reload()
27 }
28
29 FROM == OWNER && TO == NICK && /^rejoin/ {
30         reply("joining..")
31         join("#rhnoise")
32         next
33 }
34
35 FROM == OWNER && TO == NICK && /^(join|part)/ {
36         match(MSG, /(join|part) +(#+\w+)/, arr)
37         if (arr[1] && arr[2]) {
38                 send(toupper(arr[1]) " " arr[2]);
39                 next
40         }
41 }
42
43 FROM == OWNER && TO == NICK && /^\.msg/ {
44         match(MSG, /.*\.msg +(#*\w+) +(.*)/, arr)
45         send("PRIVMSG " arr[1] " :" arr[2])
46 }
47
48 # Kick handling
49 CMD == "KICK" && ARG == NICK {
50         kick_delay = (kick_delay + 2) * 2
51         system("sleep " kick_delay)
52         join(DST)
53         reply("I feel happy!")
54 }
55
56 # Identify bots
57 FROM ~ /bo+t$|rhnoise/ {
58         bots[FROM] = 1
59 }
60
61 CMD == "NICK" && FROM in bots {
62         bots[MSG] = FROM
63 }
64
65
66 # Unicode
67 /[Uu]nicode :-?\(/ {
68         plain[FROM] = 1
69 }
70
71 /[Uu]nicode :-?\)/ {
72         plain[FROM] = 0
73 }
74
75 # SFV Lug
76 function email(to, from, subj, body, sendmail)
77 {
78         from     = NICK "<andy@pileus.org>"
79         subj     = "Update sfvlug.org!"
80         body     = "The next SFVLUG meeting is TBA!"
81         sendmail = "/usr/sbin/sendmail '" to "'"
82         print "To: " to        | sendmail
83         print "From: " from    | sendmail
84         print "Subject: " subj | sendmail
85         print ""               | sendmail
86         print body             | sendmail
87         say("Topic out of date, emailing " to);
88         close(sendmail)
89 }
90
91 BEGIN { pollchan = "#sfvlug" }
92 #(CMD == "TOPIC"   && systime()-lastpoll > 60*60*24) ||
93 (CMD == "PING"    && systime()-lastpoll > 60*60*24) ||
94 (CMD == "PRIVMSG" && /^\.poll/) {
95         if (!topics[pollchan]) {
96                 debug("Unknown topic for " pollchan);
97                 send("TOPIC " pollchan)
98                 next
99         }
100         _curl     = "curl -s http://sfvlug.org/"
101         _day      = "(Sun|Mon|Tue|Wed|Thu|Fri|Sat)"
102         _web_tba  = "next meeting is: TBA"
103         _web_ptrn = "next meeting.*" _day "\\w+[, ]+([A-Z]\\w+) +([0-9]+)[, ]+([0-9]+)"
104         _irc_ptrn = _day "\\w*[, ]+([A-Z]\\w+) +([0-9]+)"
105         while (_curl | getline _line) {
106                 if (match(_line, _web_tba))
107                         email("Brian <brian@zimage.com>");
108                 if (match(_line, _web_ptrn, _parts)) {
109                         _date  = _parts[1] " " _parts[2] " " _parts[3]
110                         _topic = topics[pollchan]
111                         sub(_irc_ptrn, _date, _topic)
112                         if (_topic != topics[pollchan])
113                                 topic(pollchan, topics[pollchan] = _topic)
114                         else
115                                 debug("topic is already correct")
116                         break
117                 }
118         }
119         lastpoll = systime()
120         close(_curl)
121 }
122
123 # Versin/Uptime
124 function uptime(time,  fmt) {
125         fmt = "%d:%02d:%02d:%02d"
126         fmt = "%d days %02d:%02d:%02d"
127         return sprintf(fmt,
128                 time / (60*60*24),
129                 time / (60*60   ) % 24,
130                 time / (60      ) % 60,
131                 time / (1       ) % 60)
132 }
133 BEGIN {
134         _cmd = "git describe --always --dirty";
135         _cmd | getline up_version;
136         close(_cmd);
137         up_reload = systime();
138 }
139 /^\.version/ {
140         say("version: " up_version)
141 }
142 /^\.uptime/ {
143         _now = systime();
144         say("uptime: " uptime(_now - START) ", " \
145             "reload: " uptime(_now - up_reload))
146 }
147
148 # Fortune
149 TO == NICK && /^/               { extra = ""   }
150 TO == NICK && /^\.?fortune.*-o/ { extra = "-o" }
151 TO == NICK && /^\.?fortune/     {
152         gsub(/.*\.?fortune *|-[a-z]* *|[^a-zA-Z0-9 ]/, "", MSG)
153         cmd = "fortune " extra " " (MSG ? "-m '" MSG "'" : "-s")
154         _lines = 0
155         while (cmd | getline _fortune && _lines < 5) {
156                 say(_fortune)
157                 _lines++
158         }
159         close(cmd)
160         next
161 }
162
163 # Noise
164 FROM ~ OWNER && /^go go gadget woop/ {
165         for (i=20; i>0; i--)
166                 say(".delay " i " seconds; .woop " i)
167 }
168
169 function woop(msg) {
170         gsub(/[^Oo]/, "", $1)
171         _len = length($1)
172         if (_len == 2)
173                 _len = 10
174         if ($2)
175                 _len = $2
176         _woop = msg
177         for (i=1; i<_len; i++)
178                 _woop = _woop " " msg
179         say(_woop)
180 }
181
182 TO == NICK && /^[Ww][Oo]+[Pp] *([0-9]*)/ {
183         woop("WOOP")
184 }
185
186 /^~WOOP *([0-9]*)/ {
187         woop("(00/")
188 }
189
190 /^~woop *([0-9]*)/ {
191         woop("^H^P^P^O")
192 }
193
194 TO == NICK && DST ~ /^#/ {
195         #say("Hello, " FROM)
196 }
197
198 #DST != "#sfvlug" &&
199 !(FROM in bots) &&
200 MSG !~ /^\./ &&
201 /awk/ {
202         say("Awk, awk, awk! I'm a bird!")
203 }
204
205 !(FROM in bots) &&
206 ((TO == NICK && /(help|halp)/) ||
207  /^[^.](help|halp)/) {
208         reply("Nothing can help you now..")
209 }
210
211 /(\<[Hh][Oo]\>.*){3}/ {
212         say("\00309Merry \00304Christmas!")
213 }
214
215 !(FROM in bots) &&
216 tolower($0) ~ /\<cloud\>/ {
217         _cmd = "shuf clouds.txt"
218         _cmd | getline _cloud
219         close(_cmd)
220         say(_cloud)
221 }
222
223 /^headshot [Cc]hristmas/ {
224         say(".load Christmas")
225         say(".jingle")
226         say(".unload Christmas")
227 }
228
229 FROM == "rhnoise" && $2 == "slaps" && $3 == NICK {
230         say(".spin")
231 }
232
233 /^[Aa]nd now[.,]/ {
234         say("And now...");
235         say("THE LARCH");
236 }
237
238 # God damn commands
239 FROM == "rhnoise" && load_mod {
240         say(".load " load_mod)
241         say("rhnoise: You slag!")
242 }
243 // {
244         load_mod = ""
245 }
246 (TO  ==  "rhnoise" && /^load \w+/) ||
247 (DST == "#rhniose" && /^\.load [a-z]\w+/) {
248         gsub(/[^a-zA-Z0-9_]/, " ")
249         load_mod = toupper(substr($2,1,1)) substr($2,2);
250 }
251
252 (DST == "#rhnoise" && /^\.line /) {
253         sub(/\./, "!");
254         say($0);
255         say("scalawag: You slag!")
256 }
257
258 (DST == "#rhnoise" && /^\.qdb 268$/) {
259         say(".diediedie");
260         next
261 }
262 (DST == "#rhnoise" && /\.qdb *268/) {
263         say(".slap " FROM);
264         next
265 }
266
267 # Decrementer
268 #BEGIN {
269 #       user_scores[0] = 1
270 #}
271 #
272 #FROM == "rhnoise" && !length(user_scores) {
273 #       if (split(MSG, _parts, /, /)) {
274 #               for (_i=1; _i<=length(_parts); _i++) {
275 #                       split(_parts[_i], _tmp, ": ");
276 #                       user_scores[_i]["user"]  = _tmp[1];
277 #                       user_scores[_i]["score"] = _tmp[2];
278 #               }
279 #       }
280 #}
281 #
282 #FROM == "rhnoise" && /^User Scores:$/ {
283 #       delete user_scores
284 #}
285 #
286 #FROM == OWNER && length(user_scores) &&
287 #tolower($0) ~ /\<nuclear launch detected\>/ {
288 #       for (_i=1; _i<=length(user_scores); _i++)
289 #               say(user_scores[_i]["user"] "--");
290 #}
291
292 # Misc
293 { fflush("") }
294
295 # vim: ft=awk