10 json_load("var/login.json", login);
11 json_load("var/nounicode.json", nounicode);
12 json_load("var/nocolor.json", nocolor);
14 OWNER = login["owner"];
16 connect(login["server"], \
32 AUTH == OWNER && TO == NICK && /^die in a fire/ {
33 say("Ack, argh, barasdjf..")
37 AUTH == OWNER && TO == NICK && /^reload/ {
42 AUTH == OWNER && TO == NICK && /^rejoin/ {
48 AUTH == OWNER && TO == NICK && /^(join|part)/ {
49 if (match(MSG, /(join|part) +(#+\w+)/, arr)) {
50 if (arr[1] == "join") join(arr[2]);
51 if (arr[1] == "part") part(arr[2]);
56 AUTH == OWNER && TO == NICK && /^\.msg/ {
57 match(MSG, /.*\.msg +(#*\w+) +(.*)/, arr)
58 send("PRIVMSG " arr[1] " :" arr[2])
62 CMD == "KICK" && ARG[2] == NICK {
63 kick_delay = (kick_delay + 2) * 2
64 system("sleep " kick_delay)
66 reply("I feel happy!")
70 FROM ~ /bo+t$|rhnoise/ {
74 CMD == "NICK" && FROM in bots {
82 json_save("var/nounicode.json", nounicode);
86 delete nounicode[FROM]
87 json_save("var/nounicode.json", nounicode);
92 json_save("var/nocolor.json", nocolor);
97 json_save("var/nocolor.json", nocolor);
101 function email(to, from, subj, body, sendmail)
103 from = NICK "<andy@pileus.org>"
104 subj = "Update sfvlug.org!"
105 body = "The next SFVLUG meeting is TBA!"
106 sendmail = "/usr/sbin/sendmail '" to "'"
107 print "To: " to | sendmail
108 print "From: " from | sendmail
109 print "Subject: " subj | sendmail
111 print body | sendmail
112 say("Topic out of date, emailing " to);
116 BEGIN { pollchan = "#sfvlug" }
117 (CMD == "PING" && systime()-lastpoll > 60*60*24) ||
118 (CMD == "PRIVMSG" && /^\.poll/) {
119 if (!TOPICS[pollchan]) {
120 debug("Unknown topic for " pollchan);
121 send("TOPIC " pollchan)
124 _curl = "curl -s http://sfvlug.org/"
125 _day = "(Sun|Mon|Tue|Wed|Thu|Fri|Sat)"
126 _web_tba = "next meeting is: TBA"
127 _web_ptrn = "next meeting.*" _day "\\w+[, ]+([A-Z]\\w+) +([0-9]+)[, ]+([0-9]+)"
128 _irc_ptrn = _day "\\w*[, ]+([A-Z]\\w+) +([0-9]+)"
129 while (_curl | getline _line) {
130 #if (match(_line, _web_tba))
131 # email("Brian <brian@zimage.com>");
132 if (match(_line, _web_ptrn, _parts)) {
133 _date = _parts[1] " " _parts[2] " " _parts[3]
134 _topic = TOPICS[pollchan]
135 sub(_irc_ptrn, _date, _topic)
136 if (_topic != TOPICS[pollchan])
137 topic(pollchan, TOPICS[pollchan] = _topic)
139 debug("topic is already correct")
148 function head(cmd, var) {
153 function uptime(time, fmt) {
154 fmt = "%d:%02d:%02d:%02d"
155 fmt = "%d days %02d:%02d:%02d"
158 time / (60*60 ) % 24,
163 up_version = head("git describe --always --dirty")
164 up_author = head("git log -n1 --format=format:%an")
165 up_message = head("git log -n1 --format=format:%s")
166 up_reload = systime();
169 say("version: " up_version " - " up_author " - " up_message)
173 say("uptime: " uptime(_now - START) ", " \
174 "reload: " uptime(_now - up_reload))
179 _who = $2 ? $2 : FROM
181 say("nick=" USERS[_who]["nick"] " " \
182 "user=" USERS[_who]["user"] " " \
183 "auth=" USERS[_who]["auth"] " " \
184 "real=" USERS[_who]["real"] " " \
185 "host=" USERS[_who]["host"])
187 say("no auth info for " _who)
191 function geoip(ip, dat, cmd, line, parts) {
192 dat = "/usr/share/GeoIP/GeoIPCity.dat"
194 cmd = "geoiplookup -f " dat " " ip
198 if (split(line, parts, /[:,] /) >= 9)
199 return parts[8] "," parts[9] " -- " \
200 parts[6] ", " parts[4] ", " parts[3]
205 /^\.geoip (([0-9a-zA-Z_.-]+) *)*$/ {
206 for (_i=2; _i<=NF; _i++) {
208 say(geoip(USERS[$_i]["host"]) " -- " \
209 $_i " -> " USERS[$_i]["host"])
211 say(geoip($_i) " -- " $_i)
216 TO == NICK && /^/ { extra = "" }
217 TO == NICK && /^\.?fortune.*-o/ { extra = "-o" }
218 TO == NICK && /^\.?fortune/ {
219 gsub(/.*\.?fortune *|-[a-z]* *|[^a-zA-Z0-9 ]/, "", MSG)
220 cmd = "fortune " extra " " (MSG ? "-m '" MSG "'" : "-s")
222 while (cmd | getline _fortune && _lines < 5) {
230 /\<[Bb][Oo][Ff][Hh]\>/ {
231 _cmd = "fortune bofh-excuses"
232 _cmd | getline _fortune
233 _cmd | getline _fortune
234 _cmd | getline _fortune
243 morse[".-.-.-" ] = "."
244 morse["--..--" ] = ","
245 morse["..--.." ] = "?"
246 morse[".----." ] = "'"
247 morse["-.-.--" ] = "!"
248 morse["-..-." ] = "/"
249 morse["-.--." ] = "("
250 morse["-.--.-" ] = ")"
251 morse[".-..." ] = "&"
252 morse["---..." ] = ":"
253 morse["-.-.-." ] = ";"
254 morse["-...-" ] = "="
255 morse[".-.-." ] = "+"
256 morse["-....-" ] = "-"
257 morse["..--.-" ] = "_"
258 morse[".-..-." ] = "\""
259 morse["...-..-"] = "$"
260 morse[".--.-." ] = "@"
287 morse["-----" ] = "0"
288 morse[".----" ] = "1"
289 morse["..---" ] = "2"
290 morse["...--" ] = "3"
291 morse["....-" ] = "4"
292 morse["....." ] = "5"
293 morse["-...." ] = "6"
294 morse["--..." ] = "7"
295 morse["---.." ] = "8"
296 morse["----." ] = "9"
300 gsub(/[^.\-\/]/, " ")
302 for (i=2; i<=NF; i++)
304 _str = _str morse[$i]
308 reply("hush it, you pile of bologna")
312 AUTH == OWNER && /^go go gadget woop/ {
314 say(".delay " i " seconds; .woop " i)
318 gsub(/[^Oo]/, "", $1)
325 for (i=1; i<_len; i++)
326 _woop = _woop " " msg
330 TO == NICK && /^[Ww][Oo]+[Pp] *([0-9]*)/ {
342 TO == NICK && DST ~ /^#/ {
347 say(sprintf("Temperature: %4.1f F Humidity: %2d%%",
348 rand()*20+65, rand()*20+40))
356 say("Awk, awk, awk! I'm a bird!")
360 ((TO == NICK && /(help|halp)/) ||
361 /^[^.](help|halp)/) {
362 reply("Nothing can help you now..")
365 /(\<[Hh][Oo]\>.*){3}/ {
366 say("\00309Merry \00304Christmas!")
370 tolower($0) ~ /\<cloud\>/ {
371 _cmd = "shuf clouds.txt"
372 _cmd | getline _cloud
377 /^headshot [Cc]hristmas/ {
378 say(".load Christmas")
380 say(".unload Christmas")
383 FROM == "rhnoise" && $2 == "slaps" && $3 == NICK {
392 /(for what|that for)\?$/ {
393 say("For great justice!");
397 say("And now it's...");
398 say("Springtime for Hitler and Germany!");
402 FROM == "rhnoise" && load_mod {
403 say(".load " load_mod)
404 say("rhnoise: You slag!")
409 (TO == "rhnoise" && /^load \w+/) ||
410 (DST == "#rhniose" && /^\.load [a-z]\w+/) {
411 gsub(/[^a-zA-Z0-9_]/, " ")
412 load_mod = toupper(substr($2,1,1)) substr($2,2);
415 (DST == "#rhnoise" && /^\.line /) {
418 say("scalawag: You slag!")
421 (DST == "#rhnoise" && /^\.qdb 268$/) {
425 (DST == "#rhnoise" && /\.qdb *268/) {
436 /^\.(scores|scoreboard)$/ {
440 FROM == "rhnoise" && !length(user_scores) {
441 if (split(MSG, _parts, /, /)) {
442 for (_i=1; _i<=length(_parts); _i++) {
443 split(_parts[_i], _tmp, ": ");
444 user_scores[_i]["user"] = _tmp[1];
445 user_scores[_i]["score"] = _tmp[2];
450 length(user_scores) &&
451 tolower($0) ~ /\<nuclear launch detected\>/ {
453 for (_i=1; _i<=length(user_scores); _i++) {
454 _user = user_scores[_i]["user"];
455 _score = user_scores[_i]["score"];
456 if (_user in USERS) continue
457 if (_score == 1) { say(_user "--"); _count++; }
458 if (_score == -1) { say(_user "++"); _count++; }
464 say("looks like you're safe.. for now..");
469 DST != "#rhnoise" && /\<[a-zA-Z0-9_]{3,16}(\+\+|--)/ {
470 say("#rhnoise", "(" DST ") " FROM ": " MSG);