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