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"], \
32 PROCINFO["sorted_in"] = "@ind_str_asc";
36 AUTH == OWNER && TO == NICK && /^die in a fire/ {
37 say("Ack, argh, barasdjf..")
41 AUTH == OWNER && TO == NICK && /^reload/ {
46 AUTH == OWNER && TO == NICK && /^rejoin/ {
52 AUTH == OWNER && TO == NICK && /^(join|part)/ {
53 if (match(MSG, /(join|part) +(#+\w+)/, arr)) {
54 if (arr[1] == "join") join(arr[2]);
55 if (arr[1] == "part") part(arr[2]);
60 AUTH == OWNER && TO == NICK && /^\.msg/ {
61 match(MSG, /.*\.msg +(#*\w+) +(.*)/, arr)
62 send("PRIVMSG " arr[1] " :" arr[2])
66 CMD == "KICK" && ARG[2] == NICK {
67 kick_delay = (kick_delay + 2) * 2
68 system("sleep " kick_delay)
70 reply("I feel happy!")
74 FROM ~ /bo+t$|rhnoise/ {
78 CMD == "NICK" && FROM in bots {
86 json_save("var/nounicode.json", nounicode);
90 delete nounicode[FROM]
91 json_save("var/nounicode.json", nounicode);
96 json_save("var/nocolor.json", nocolor);
101 json_save("var/nocolor.json", nocolor);
105 function head(cmd, var) {
110 function uptime(time, fmt) {
111 fmt = "%d:%02d:%02d:%02d"
112 fmt = "%d days %02d:%02d:%02d"
115 time / (60*60 ) % 24,
120 up_version = head("git describe --always")
121 up_dirty = head("git describe --always --dirty")
122 up_author = head("git log -n1 --format=format:%an")
123 up_message = head("git log -n1 --format=format:%s")
124 up_reload = systime();
127 say("version: " up_dirty " - " up_author " - " up_message)
128 say("http://pileus.org/git/?p=~andy/rhawk;h=" up_version)
132 say("uptime: " uptime(_now - START) ", " \
133 "reload: " uptime(_now - up_reload))
138 _who = $2 ? $2 : FROM
140 say("nick=" USERS[_who]["nick"] " " \
141 "user=" USERS[_who]["user"] " " \
142 "auth=" USERS[_who]["auth"] " " \
143 "real=" USERS[_who]["real"] " " \
144 "host=" USERS[_who]["host"])
146 say("no auth info for " _who)
150 function geoip(ip, dat, cmd, line, parts) {
151 dat = "/usr/share/GeoIP/GeoIPCity.dat"
153 cmd = "geoiplookup -f " dat " " ip
157 if (split(line, parts, /[:,] /) >= 9)
158 return parts[8] "," parts[9] " -- " \
159 parts[6] ", " parts[4] ", " parts[3]
164 /^\.geoip (([0-9a-zA-Z_.-]+) *)*$/ {
165 for (_i=2; _i<=NF; _i++) {
167 say(geoip(USERS[$_i]["host"]) " -- " \
168 $_i " -> " USERS[$_i]["host"])
170 say(geoip($_i) " -- " $_i)
175 TO == NICK && /^/ { extra = "" }
176 TO == NICK && /^\.?fortune.*-o/ { extra = "-o" }
177 TO == NICK && /^\.?fortune/ {
178 gsub(/.*\.?fortune *|-[a-z]* *|[^a-zA-Z0-9 ]/, "", MSG)
179 cmd = "fortune " extra " " (MSG ? "-m '" MSG "'" : "-s")
181 while (cmd | getline _fortune && _lines < 5) {
189 /\<[Bb][Oo][Ff][Hh]\>/ {
190 _cmd = "fortune bofh-excuses"
191 _cmd | getline _fortune
192 _cmd | getline _fortune
193 _cmd | getline _fortune
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[".-..-." ] = "\""
218 morse["...-..-"] = "$"
219 morse[".--.-." ] = "@"
246 morse["-----" ] = "0"
247 morse[".----" ] = "1"
248 morse["..---" ] = "2"
249 morse["...--" ] = "3"
250 morse["....-" ] = "4"
251 morse["....." ] = "5"
252 morse["-...." ] = "6"
253 morse["--..." ] = "7"
254 morse["---.." ] = "8"
255 morse["----." ] = "9"
259 gsub(/[^.\-\/]/, " ")
261 for (i=2; i<=NF; i++)
263 _str = _str morse[$i]
267 reply("hush it, you pile of bologna")
271 AUTH == OWNER && /^go go gadget woop/ {
273 say(".delay " i " seconds; .woop " i)
277 gsub(/[^Oo]/, "", $1)
284 for (i=1; i<_len; i++)
285 _woop = _woop " " msg
289 TO == NICK && /^[Ww][Oo]+[Pp] *([0-9]*)/ {
301 TO == NICK && DST ~ /^#/ {
306 say(sprintf("Temperature: %4.1f F Humidity: %2d%%",
307 rand()*20+65, rand()*20+40))
315 say("Awk, awk, awk! I'm a bird!")
318 /(\<[Hh][Oo]\>.*){3}/ {
319 say("\00309Merry \00304Christmas!")
323 tolower($0) ~ /\<cloud\>/ {
324 _cmd = "shuf clouds.txt"
325 _cmd | getline _cloud
330 /^headshot [Cc]hristmas/ {
331 say(".load Christmas")
333 say(".unload Christmas")
336 FROM == "rhnoise" && $2 == "slaps" && $3 == NICK {
345 /(for what|that for)\?$/ {
346 say("For great justice!");
350 say("And now it's...");
351 say("Springtime for Hitler and Germany!");
357 say("\x02MD 20/20\x0f - \x02Morgen David\x0f - \x02Under an overpass\x0f - ***** (3 minutes ago)");
363 FROM == "rhnoise" && load_mod {
364 say(".load " load_mod)
365 say("rhnoise: You slag!")
370 (TO == "rhnoise" && /^load \w+/) ||
371 (DST == "#rhniose" && /^\.load [a-z]\w+/) {
372 gsub(/[^a-zA-Z0-9_]/, " ")
373 load_mod = toupper(substr($2,1,1)) substr($2,2);
376 (DST == "#rhnoise" && /^\.line /) {
379 say("scalawag: You slag!")
382 (DST == "#rhnoise" && /^\.qdb 268$/) {
386 (DST == "#rhnoise" && /\.qdb *268/) {
397 /^\.(scores|scoreboard)$/ {
401 FROM == "rhnoise" && !length(user_scores) {
402 if (split(MSG, _parts, /, /)) {
403 for (_i=1; _i<=length(_parts); _i++) {
404 split(_parts[_i], _tmp, ": ");
405 user_scores[_i]["user"] = _tmp[1];
406 user_scores[_i]["score"] = _tmp[2];
411 length(user_scores) &&
412 tolower($0) ~ /\<nuclear launch detected\>/ {
414 for (_i=1; _i<=length(user_scores); _i++) {
415 _user = user_scores[_i]["user"];
416 _score = user_scores[_i]["score"];
417 if (_user in USERS) continue
418 if (_score == 1) { say(_user "--"); _count++; }
419 if (_score == -1) { say(_user "++"); _count++; }
425 say("looks like you're safe.. for now..");
430 DST != "#rhnoise" && DST != NICK &&
431 /\<[a-zA-Z0-9_]{3,16}(\+\+|--)/ {
432 say("#rhnoise", "(" DST ") " FROM ": " MSG);
436 function bang(a, b) {
437 if (a=="nan") return "nan";
438 if (b=="nan") return "nan";
439 if (a==b) return "nan";
440 if (a==0) return "+0";
441 if (b==0) return "-0";
442 return 1/(1/a - 1/b);
445 /^ *[+-]?[0-9]*\.?[0-9]+( *\? *[+-]?[0-9]*\.?[0-9]+)+ *$/ {
448 for (_i=2; _i<=NF; _i++)
449 _num = bang(_num, $_i+0);