12 json_load("var/login.json", login);
13 json_load("var/nounicode.json", nounicode);
14 json_load("var/nocolor.json", nocolor);
16 OWNER = login["owner"];
18 connect(login["server"], \
34 AUTH == OWNER && TO == NICK && /^die in a fire/ {
35 say("Ack, argh, barasdjf..")
39 AUTH == OWNER && TO == NICK && /^reload/ {
44 AUTH == OWNER && TO == NICK && /^rejoin/ {
50 AUTH == OWNER && TO == NICK && /^(join|part)/ {
51 if (match(MSG, /(join|part) +(#+\w+)/, arr)) {
52 if (arr[1] == "join") join(arr[2]);
53 if (arr[1] == "part") part(arr[2]);
58 AUTH == OWNER && TO == NICK && /^\.msg/ {
59 match(MSG, /.*\.msg +(#*\w+) +(.*)/, arr)
60 send("PRIVMSG " arr[1] " :" arr[2])
64 CMD == "KICK" && ARG[2] == NICK {
65 kick_delay = (kick_delay + 2) * 2
66 system("sleep " kick_delay)
68 reply("I feel happy!")
72 FROM ~ /bo+t$|rhnoise/ {
76 CMD == "NICK" && FROM in bots {
84 json_save("var/nounicode.json", nounicode);
88 delete nounicode[FROM]
89 json_save("var/nounicode.json", nounicode);
94 json_save("var/nocolor.json", nocolor);
99 json_save("var/nocolor.json", nocolor);
103 function head(cmd, var) {
108 function uptime(time, fmt) {
109 fmt = "%d:%02d:%02d:%02d"
110 fmt = "%d days %02d:%02d:%02d"
113 time / (60*60 ) % 24,
118 up_version = head("git describe --always")
119 up_dirty = head("git describe --always --dirty")
120 up_author = head("git log -n1 --format=format:%an")
121 up_message = head("git log -n1 --format=format:%s")
122 up_reload = systime();
125 say("version: " up_dirty " - " up_author " - " up_message)
126 say("http://pileus.org/git/?p=~andy/rhawk;h=" up_version)
130 say("uptime: " uptime(_now - START) ", " \
131 "reload: " uptime(_now - up_reload))
136 _who = $2 ? $2 : FROM
138 say("nick=" USERS[_who]["nick"] " " \
139 "user=" USERS[_who]["user"] " " \
140 "auth=" USERS[_who]["auth"] " " \
141 "real=" USERS[_who]["real"] " " \
142 "host=" USERS[_who]["host"])
144 say("no auth info for " _who)
148 function geoip(ip, dat, cmd, line, parts) {
149 dat = "/usr/share/GeoIP/GeoIPCity.dat"
151 cmd = "geoiplookup -f " dat " " ip
155 if (split(line, parts, /[:,] /) >= 9)
156 return parts[8] "," parts[9] " -- " \
157 parts[6] ", " parts[4] ", " parts[3]
162 /^\.geoip (([0-9a-zA-Z_.-]+) *)*$/ {
163 for (_i=2; _i<=NF; _i++) {
165 say(geoip(USERS[$_i]["host"]) " -- " \
166 $_i " -> " USERS[$_i]["host"])
168 say(geoip($_i) " -- " $_i)
173 TO == NICK && /^/ { extra = "" }
174 TO == NICK && /^\.?fortune.*-o/ { extra = "-o" }
175 TO == NICK && /^\.?fortune/ {
176 gsub(/.*\.?fortune *|-[a-z]* *|[^a-zA-Z0-9 ]/, "", MSG)
177 cmd = "fortune " extra " " (MSG ? "-m '" MSG "'" : "-s")
179 while (cmd | getline _fortune && _lines < 5) {
187 /\<[Bb][Oo][Ff][Hh]\>/ {
188 _cmd = "fortune bofh-excuses"
189 _cmd | getline _fortune
190 _cmd | getline _fortune
191 _cmd | getline _fortune
200 morse[".-.-.-" ] = "."
201 morse["--..--" ] = ","
202 morse["..--.." ] = "?"
203 morse[".----." ] = "'"
204 morse["-.-.--" ] = "!"
205 morse["-..-." ] = "/"
206 morse["-.--." ] = "("
207 morse["-.--.-" ] = ")"
208 morse[".-..." ] = "&"
209 morse["---..." ] = ":"
210 morse["-.-.-." ] = ";"
211 morse["-...-" ] = "="
212 morse[".-.-." ] = "+"
213 morse["-....-" ] = "-"
214 morse["..--.-" ] = "_"
215 morse[".-..-." ] = "\""
216 morse["...-..-"] = "$"
217 morse[".--.-." ] = "@"
244 morse["-----" ] = "0"
245 morse[".----" ] = "1"
246 morse["..---" ] = "2"
247 morse["...--" ] = "3"
248 morse["....-" ] = "4"
249 morse["....." ] = "5"
250 morse["-...." ] = "6"
251 morse["--..." ] = "7"
252 morse["---.." ] = "8"
253 morse["----." ] = "9"
257 gsub(/[^.\-\/]/, " ")
259 for (i=2; i<=NF; i++)
261 _str = _str morse[$i]
265 reply("hush it, you pile of bologna")
269 AUTH == OWNER && /^go go gadget woop/ {
271 say(".delay " i " seconds; .woop " i)
275 gsub(/[^Oo]/, "", $1)
282 for (i=1; i<_len; i++)
283 _woop = _woop " " msg
287 TO == NICK && /^[Ww][Oo]+[Pp] *([0-9]*)/ {
299 TO == NICK && DST ~ /^#/ {
304 say(sprintf("Temperature: %4.1f F Humidity: %2d%%",
305 rand()*20+65, rand()*20+40))
313 say("Awk, awk, awk! I'm a bird!")
316 /(\<[Hh][Oo]\>.*){3}/ {
317 say("\00309Merry \00304Christmas!")
321 tolower($0) ~ /\<cloud\>/ {
322 _cmd = "shuf clouds.txt"
323 _cmd | getline _cloud
328 /^headshot [Cc]hristmas/ {
329 say(".load Christmas")
331 say(".unload Christmas")
334 FROM == "rhnoise" && $2 == "slaps" && $3 == NICK {
343 /(for what|that for)\?$/ {
344 say("For great justice!");
348 say("And now it's...");
349 say("Springtime for Hitler and Germany!");
355 say("\x02MD 20/20\x0f - \x02Morgen David\x0f - \x02Under an overpass\x0f - ***** (3 minutes ago)");
361 FROM == "rhnoise" && load_mod {
362 say(".load " load_mod)
363 say("rhnoise: You slag!")
368 (TO == "rhnoise" && /^load \w+/) ||
369 (DST == "#rhniose" && /^\.load [a-z]\w+/) {
370 gsub(/[^a-zA-Z0-9_]/, " ")
371 load_mod = toupper(substr($2,1,1)) substr($2,2);
374 (DST == "#rhnoise" && /^\.line /) {
377 say("scalawag: You slag!")
380 (DST == "#rhnoise" && /^\.qdb 268$/) {
384 (DST == "#rhnoise" && /\.qdb *268/) {
395 /^\.(scores|scoreboard)$/ {
399 FROM == "rhnoise" && !length(user_scores) {
400 if (split(MSG, _parts, /, /)) {
401 for (_i=1; _i<=length(_parts); _i++) {
402 split(_parts[_i], _tmp, ": ");
403 user_scores[_i]["user"] = _tmp[1];
404 user_scores[_i]["score"] = _tmp[2];
409 length(user_scores) &&
410 tolower($0) ~ /\<nuclear launch detected\>/ {
412 for (_i=1; _i<=length(user_scores); _i++) {
413 _user = user_scores[_i]["user"];
414 _score = user_scores[_i]["score"];
415 if (_user in USERS) continue
416 if (_score == 1) { say(_user "--"); _count++; }
417 if (_score == -1) { say(_user "++"); _count++; }
423 say("looks like you're safe.. for now..");
428 DST != "#rhnoise" && DST != NICK &&
429 /\<[a-zA-Z0-9_]{3,16}(\+\+|--)/ {
430 say("#rhnoise", "(" DST ") " FROM ": " MSG);
434 function bang(a, b) {
435 if (a=="nan") return "nan";
436 if (b=="nan") return "nan";
437 if (a==b) return "nan";
438 if (a==0) return "+0";
439 if (b==0) return "-0";
440 return 1/(1/a - 1/b);
443 /^ *[+-]?[0-9]*\.?[0-9]+( *\? *[+-]?[0-9]*\.?[0-9]+)+ *$/ {
446 for (_i=2; _i<=NF; _i++)
447 _num = bang(_num, $_i+0);