11 json_load("var/login.json", login);
12 json_load("var/nounicode.json", nounicode);
13 json_load("var/nocolor.json", nocolor);
15 OWNER = login["owner"];
17 connect(login["server"], \
33 AUTH == OWNER && TO == NICK && /^die in a fire/ {
34 say("Ack, argh, barasdjf..")
38 AUTH == OWNER && TO == NICK && /^reload/ {
43 AUTH == OWNER && TO == NICK && /^rejoin/ {
49 AUTH == OWNER && TO == NICK && /^(join|part)/ {
50 if (match(MSG, /(join|part) +(#+\w+)/, arr)) {
51 if (arr[1] == "join") join(arr[2]);
52 if (arr[1] == "part") part(arr[2]);
57 AUTH == OWNER && TO == NICK && /^\.msg/ {
58 match(MSG, /.*\.msg +(#*\w+) +(.*)/, arr)
59 send("PRIVMSG " arr[1] " :" arr[2])
63 CMD == "KICK" && ARG[2] == NICK {
64 kick_delay = (kick_delay + 2) * 2
65 system("sleep " kick_delay)
67 reply("I feel happy!")
71 FROM ~ /bo+t$|rhnoise/ {
75 CMD == "NICK" && FROM in bots {
83 json_save("var/nounicode.json", nounicode);
87 delete nounicode[FROM]
88 json_save("var/nounicode.json", nounicode);
93 json_save("var/nocolor.json", nocolor);
98 json_save("var/nocolor.json", nocolor);
102 function head(cmd, var) {
107 function uptime(time, fmt) {
108 fmt = "%d:%02d:%02d:%02d"
109 fmt = "%d days %02d:%02d:%02d"
112 time / (60*60 ) % 24,
117 up_version = head("git describe --always")
118 up_dirty = head("git describe --always --dirty")
119 up_author = head("git log -n1 --format=format:%an")
120 up_message = head("git log -n1 --format=format:%s")
121 up_reload = systime();
124 say("version: " up_dirty " - " up_author " - " up_message)
125 say("http://pileus.org/git/?p=~andy/rhawk;h=" up_version)
129 say("uptime: " uptime(_now - START) ", " \
130 "reload: " uptime(_now - up_reload))
135 _who = $2 ? $2 : FROM
137 say("nick=" USERS[_who]["nick"] " " \
138 "user=" USERS[_who]["user"] " " \
139 "auth=" USERS[_who]["auth"] " " \
140 "real=" USERS[_who]["real"] " " \
141 "host=" USERS[_who]["host"])
143 say("no auth info for " _who)
147 function geoip(ip, dat, cmd, line, parts) {
148 dat = "/usr/share/GeoIP/GeoIPCity.dat"
150 cmd = "geoiplookup -f " dat " " ip
154 if (split(line, parts, /[:,] /) >= 9)
155 return parts[8] "," parts[9] " -- " \
156 parts[6] ", " parts[4] ", " parts[3]
161 /^\.geoip (([0-9a-zA-Z_.-]+) *)*$/ {
162 for (_i=2; _i<=NF; _i++) {
164 say(geoip(USERS[$_i]["host"]) " -- " \
165 $_i " -> " USERS[$_i]["host"])
167 say(geoip($_i) " -- " $_i)
172 TO == NICK && /^/ { extra = "" }
173 TO == NICK && /^\.?fortune.*-o/ { extra = "-o" }
174 TO == NICK && /^\.?fortune/ {
175 gsub(/.*\.?fortune *|-[a-z]* *|[^a-zA-Z0-9 ]/, "", MSG)
176 cmd = "fortune " extra " " (MSG ? "-m '" MSG "'" : "-s")
178 while (cmd | getline _fortune && _lines < 5) {
186 /\<[Bb][Oo][Ff][Hh]\>/ {
187 _cmd = "fortune bofh-excuses"
188 _cmd | getline _fortune
189 _cmd | getline _fortune
190 _cmd | getline _fortune
199 morse[".-.-.-" ] = "."
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[".--.-." ] = "@"
243 morse["-----" ] = "0"
244 morse[".----" ] = "1"
245 morse["..---" ] = "2"
246 morse["...--" ] = "3"
247 morse["....-" ] = "4"
248 morse["....." ] = "5"
249 morse["-...." ] = "6"
250 morse["--..." ] = "7"
251 morse["---.." ] = "8"
252 morse["----." ] = "9"
256 gsub(/[^.\-\/]/, " ")
258 for (i=2; i<=NF; i++)
260 _str = _str morse[$i]
264 reply("hush it, you pile of bologna")
268 AUTH == OWNER && /^go go gadget woop/ {
270 say(".delay " i " seconds; .woop " i)
274 gsub(/[^Oo]/, "", $1)
281 for (i=1; i<_len; i++)
282 _woop = _woop " " msg
286 TO == NICK && /^[Ww][Oo]+[Pp] *([0-9]*)/ {
298 TO == NICK && DST ~ /^#/ {
303 say(sprintf("Temperature: %4.1f F Humidity: %2d%%",
304 rand()*20+65, rand()*20+40))
312 say("Awk, awk, awk! I'm a bird!")
315 /(\<[Hh][Oo]\>.*){3}/ {
316 say("\00309Merry \00304Christmas!")
320 tolower($0) ~ /\<cloud\>/ {
321 _cmd = "shuf clouds.txt"
322 _cmd | getline _cloud
327 /^headshot [Cc]hristmas/ {
328 say(".load Christmas")
330 say(".unload Christmas")
333 FROM == "rhnoise" && $2 == "slaps" && $3 == NICK {
342 /(for what|that for)\?$/ {
343 say("For great justice!");
347 say("And now it's...");
348 say("Springtime for Hitler and Germany!");
354 say("\x02MD 20/20\x0f - \x02Morgen David\x0f - \x02Under an overpass\x0f - ***** (3 minutes ago)");
360 FROM == "rhnoise" && load_mod {
361 say(".load " load_mod)
362 say("rhnoise: You slag!")
367 (TO == "rhnoise" && /^load \w+/) ||
368 (DST == "#rhniose" && /^\.load [a-z]\w+/) {
369 gsub(/[^a-zA-Z0-9_]/, " ")
370 load_mod = toupper(substr($2,1,1)) substr($2,2);
373 (DST == "#rhnoise" && /^\.line /) {
376 say("scalawag: You slag!")
379 (DST == "#rhnoise" && /^\.qdb 268$/) {
383 (DST == "#rhnoise" && /\.qdb *268/) {
394 /^\.(scores|scoreboard)$/ {
398 FROM == "rhnoise" && !length(user_scores) {
399 if (split(MSG, _parts, /, /)) {
400 for (_i=1; _i<=length(_parts); _i++) {
401 split(_parts[_i], _tmp, ": ");
402 user_scores[_i]["user"] = _tmp[1];
403 user_scores[_i]["score"] = _tmp[2];
408 length(user_scores) &&
409 tolower($0) ~ /\<nuclear launch detected\>/ {
411 for (_i=1; _i<=length(user_scores); _i++) {
412 _user = user_scores[_i]["user"];
413 _score = user_scores[_i]["score"];
414 if (_user in USERS) continue
415 if (_score == 1) { say(_user "--"); _count++; }
416 if (_score == -1) { say(_user "++"); _count++; }
422 say("looks like you're safe.. for now..");
427 DST != "#rhnoise" && DST != NICK &&
428 /\<[a-zA-Z0-9_]{3,16}(\+\+|--)/ {
429 say("#rhnoise", "(" DST ") " FROM ": " MSG);