#!awk -f
@include "irc.awk"
+@include "json.awk"
@include "spades.awk"
+#@include "email.awk"
# Initialization
BEGIN {
- OWNER = "andy753421"
- connect("localhost", "rhawk", "#rhtest");
+ json_load("var/login.json", login);
+ json_load("var/nounicode.json", nounicode);
+ json_load("var/nocolor.json", nocolors);
+
+ OWNER = login["owner"];
+
+ connect(login["server"], \
+ login["nick"], \
+ login["channel"], \
+ login["auth"], \
+ login["pass"])
+
+ delete login
+
+ if (FIRST) {
+ join("#rhnoise")
+ join("#rhspades")
+ join("#sfvlug")
+ }
}
# Admin
-FROM == OWNER && TO == NICK && /^die in a fire/ {
+AUTH == OWNER && TO == NICK && /^die in a fire/ {
say("Ack, argh, barasdjf..")
quit()
}
-FROM == OWNER && TO == NICK && /^reload/ {
+AUTH == OWNER && TO == NICK && /^reload/ {
say("Reloading..")
reload()
}
-FROM == OWNER && TO == NICK && /^rejoin/ {
+AUTH == OWNER && TO == NICK && /^rejoin/ {
reply("joining..")
join("#rhnoise")
next
}
-FROM == OWNER && TO == NICK && /^(join|part)/ {
- match(MSG, /(join|part) +(#+\w+)/, arr)
- if (arr[1] && arr[2]) {
- send(toupper(arr[1]) " " arr[2]);
+AUTH == OWNER && TO == NICK && /^(join|part)/ {
+ if (match(MSG, /(join|part) +(#+\w+)/, arr)) {
+ if (arr[1] == "join") join(arr[2]);
+ if (arr[1] == "part") part(arr[2]);
next
}
}
-FROM == OWNER && TO == NICK && /^\.msg/ {
+AUTH == OWNER && TO == NICK && /^\.msg/ {
match(MSG, /.*\.msg +(#*\w+) +(.*)/, arr)
send("PRIVMSG " arr[1] " :" arr[2])
}
# Kick handling
-CMD == "KICK" && ARG == NICK {
+CMD == "KICK" && ARG[2] == NICK {
kick_delay = (kick_delay + 2) * 2
system("sleep " kick_delay)
join(DST)
}
-# Unicode
+# Fancy output
/[Uu]nicode :-?\(/ {
- plain[FROM] = 1
+ nounicode[FROM] = 1
+ json_save("var/nounicode.json", nounicode);
}
/[Uu]nicode :-?\)/ {
- plain[FROM] = 0
+ delete nounicode[FROM]
+ json_save("var/nounicode.json", nounicode);
+}
+
+/[Cc]olors :-?\(/ {
+ nocolor[FROM] = 1
+ json_save("var/nocolor.json", nocolor);
+}
+
+/[Cc]olors :-?\)/ {
+ delete nocolor[FROM]
+ json_save("var/nocolor.json", nocolor);
}
# SFV Lug
+function email(to, from, subj, body, sendmail)
+{
+ from = NICK "<andy@pileus.org>"
+ subj = "Update sfvlug.org!"
+ body = "The next SFVLUG meeting is TBA!"
+ sendmail = "/usr/sbin/sendmail '" to "'"
+ print "To: " to | sendmail
+ print "From: " from | sendmail
+ print "Subject: " subj | sendmail
+ print "" | sendmail
+ print body | sendmail
+ say("Topic out of date, emailing " to);
+ close(sendmail)
+}
+
BEGIN { pollchan = "#sfvlug" }
(CMD == "PING" && systime()-lastpoll > 60*60*24) ||
-(CMD == "PRIVMSG" && DST == pollchan && /^\.poll/) {
- if (!topics[pollchan]) {
+(CMD == "PRIVMSG" && /^\.poll/) {
+ if (!TOPICS[pollchan]) {
debug("Unknown topic for " pollchan);
+ send("TOPIC " pollchan)
next
}
- cmd = "curl -s http://sfvlug.org/"
- day = "(Sun|Mon|Tue|Wed|Thu|Fri|Sat)"
- web = "next meeting.*" day "\\w+[, ]+([A-Z]\\w+) +([0-9]+)[, ]+([0-9]+)"
- irc = day "\\w*[, ]+([A-Z]\\w+) +([0-9]+)"
- while (cmd | getline line) {
- if (match(line, web, arr)) {
- new = arr[1] " " arr[2] " " arr[3]
- sub(irc, new, topics[pollchan])
- topic(pollchan, topics[pollchan])
+ _curl = "curl -s http://sfvlug.org/"
+ _day = "(Sun|Mon|Tue|Wed|Thu|Fri|Sat)"
+ _web_tba = "next meeting is: TBA"
+ _web_ptrn = "next meeting.*" _day "\\w+[, ]+([A-Z]\\w+) +([0-9]+)[, ]+([0-9]+)"
+ _irc_ptrn = _day "\\w*[, ]+([A-Z]\\w+) +([0-9]+)"
+ while (_curl | getline _line) {
+ #if (match(_line, _web_tba))
+ # email("Brian <brian@zimage.com>");
+ if (match(_line, _web_ptrn, _parts)) {
+ _date = _parts[1] " " _parts[2] " " _parts[3]
+ _topic = TOPICS[pollchan]
+ sub(_irc_ptrn, _date, _topic)
+ if (_topic != TOPICS[pollchan])
+ topic(pollchan, TOPICS[pollchan] = _topic)
+ else
+ debug("topic is already correct")
break
}
}
lastpoll = systime()
+ close(_curl)
+}
+
+# Versin/Uptime
+function head(cmd, var) {
+ cmd | getline var
close(cmd)
+ return var
+}
+function uptime(time, fmt) {
+ fmt = "%d:%02d:%02d:%02d"
+ fmt = "%d days %02d:%02d:%02d"
+ return sprintf(fmt,
+ time / (60*60*24),
+ time / (60*60 ) % 24,
+ time / (60 ) % 60,
+ time / (1 ) % 60)
+}
+BEGIN {
+ up_version = head("git describe --always --dirty")
+ up_author = head("git log -n1 --format=format:%an")
+ up_message = head("git log -n1 --format=format:%s")
+ up_reload = systime();
+}
+/^\.(version|rev)/ {
+ say("version: " up_version " - " up_author " - " up_message)
+}
+/^\.uptime/ {
+ _now = systime();
+ say("uptime: " uptime(_now - START) ", " \
+ "reload: " uptime(_now - up_reload))
+}
+
+# Auth info
+/^\.auth/ {
+ _who = $2 ? $2 : FROM
+ if (_who in USERS)
+ say("nick=" USERS[_who]["nick"] " " \
+ "user=" USERS[_who]["user"] " " \
+ "auth=" USERS[_who]["auth"] " " \
+ "real=" USERS[_who]["real"] " " \
+ "host=" USERS[_who]["host"])
+ else
+ say("no auth info for " _who)
}
# Fortune
-TO == NICK && /^/ { extra = "" }
-TO == NICK && /^.fortune.*-o/ { extra = "-o" }
-TO == NICK && /^.fortune/ {
- gsub(/.*\.fortune *|-[a-z]* *|[^a-zA-Z0-9 ]/, "", MSG)
+TO == NICK && /^/ { extra = "" }
+TO == NICK && /^\.?fortune.*-o/ { extra = "-o" }
+TO == NICK && /^\.?fortune/ {
+ gsub(/.*\.?fortune *|-[a-z]* *|[^a-zA-Z0-9 ]/, "", MSG)
cmd = "fortune " extra " " (MSG ? "-m '" MSG "'" : "-s")
- while (cmd | getline _fortune && lines < 5) {
+ _lines = 0
+ while (cmd | getline _fortune && _lines < 5) {
say(_fortune)
- lines++
+ _lines++
}
close(cmd)
next
}
+# Morse code
+BEGIN {
+ morse["/" ] = " "
+ morse[".-.-.-" ] = "."
+ morse["--..--" ] = ","
+ morse["..--.." ] = "?"
+ morse[".----." ] = "'"
+ morse["-.-.--" ] = "!"
+ morse["-..-." ] = "/"
+ morse["-.--." ] = "("
+ morse["-.--.-" ] = ")"
+ morse[".-..." ] = "&"
+ morse["---..." ] = ":"
+ morse["-.-.-." ] = ";"
+ morse["-...-" ] = "="
+ morse[".-.-." ] = "+"
+ morse["-....-" ] = "-"
+ morse["..--.-" ] = "_"
+ morse[".-..-." ] = "\""
+ morse["...-..-"] = "$"
+ morse[".--.-." ] = "@"
+ morse[".-" ] = "a"
+ morse["-..." ] = "b"
+ morse["-.-." ] = "c"
+ morse["-.." ] = "d"
+ morse["." ] = "e"
+ morse["..-." ] = "f"
+ morse["--." ] = "g"
+ morse["...." ] = "h"
+ morse[".." ] = "i"
+ morse[".---" ] = "j"
+ morse["-.-" ] = "k"
+ morse[".-.." ] = "l"
+ morse["--" ] = "m"
+ morse["-." ] = "n"
+ morse["---" ] = "o"
+ morse[".--." ] = "p"
+ morse["--.-" ] = "q"
+ morse[".-." ] = "r"
+ morse["..." ] = "s"
+ morse["-" ] = "t"
+ morse["..-" ] = "u"
+ morse["...-" ] = "v"
+ morse[".--" ] = "w"
+ morse["-..-" ] = "x"
+ morse["-.--" ] = "y"
+ morse["--.." ] = "z"
+ morse["-----" ] = "0"
+ morse[".----" ] = "1"
+ morse["..---" ] = "2"
+ morse["...--" ] = "3"
+ morse["....-" ] = "4"
+ morse["....." ] = "5"
+ morse["-...." ] = "6"
+ morse["--..." ] = "7"
+ morse["---.." ] = "8"
+ morse["----." ] = "9"
+}
+
+/^\.morse/ {
+ gsub(/[^.\-\/]/, " ")
+ _str = ""
+ for (i=2; i<=NF; i++)
+ if ($i in morse)
+ _str = _str morse[$i]
+ if (_str)
+ reply(_str)
+ else
+ reply("hush it, you pile of bologna")
+}
+
# Noise
-FROM ~ OWNER && /^go go gadget woop/ {
+AUTH == OWNER && /^go go gadget woop/ {
for (i=20; i>0; i--)
say(".delay " i " seconds; .woop " i)
}
+function woop(msg) {
+ gsub(/[^Oo]/, "", $1)
+ _len = length($1)
+ if (_len == 2)
+ _len = 10
+ if ($2)
+ _len = $2
+ _woop = msg
+ for (i=1; i<_len; i++)
+ _woop = _woop " " msg
+ say(_woop)
+}
+
+TO == NICK && /^[Ww][Oo]+[Pp] *([0-9]*)/ {
+ woop("WOOP")
+}
+
+/^~WOOP *([0-9]*)/ {
+ woop("(00/")
+}
+
+/^~woop *([0-9]*)/ {
+ woop("^H^P^P^O")
+}
+
TO == NICK && DST ~ /^#/ {
#say("Hello, " FROM)
}
+#DST != "#sfvlug" &&
!(FROM in bots) &&
+CMD == "PRIVMSG" &&
MSG !~ /^\./ &&
/awk/ {
say("Awk, awk, awk! I'm a bird!")
}
-/^\.help/ {
+!(FROM in bots) &&
+((TO == NICK && /(help|halp)/) ||
+ /^[^.](help|halp)/) {
reply("Nothing can help you now..")
}
-/Ho.*Ho.*Ho/ {
+/(\<[Hh][Oo]\>.*){3}/ {
say("\00309Merry \00304Christmas!")
}
+!(FROM in bots) &&
+tolower($0) ~ /\<cloud\>/ {
+ _cmd = "shuf clouds.txt"
+ _cmd | getline _cloud
+ close(_cmd)
+ say(_cloud)
+}
+
+/^headshot [Cc]hristmas/ {
+ say(".load Christmas")
+ say(".jingle")
+ say(".unload Christmas")
+}
+
+FROM == "rhnoise" && $2 == "slaps" && $3 == NICK {
+ say(".spin")
+}
+
+/^[Aa]nd now[.,]/ {
+ say("And now...");
+ say("THE LARCH");
+}
+
+/(for what|that for)\?$/ {
+ say("For great justice!");
+}
+
+/\<nazi/ {
+ say("And now it's...");
+ say("Springtime for Hitler and Germany!");
+}
+
+# God damn commands
+FROM == "rhnoise" && load_mod {
+ say(".load " load_mod)
+ say("rhnoise: You slag!")
+}
+// {
+ load_mod = ""
+}
+(TO == "rhnoise" && /^load \w+/) ||
+(DST == "#rhniose" && /^\.load [a-z]\w+/) {
+ gsub(/[^a-zA-Z0-9_]/, " ")
+ load_mod = toupper(substr($2,1,1)) substr($2,2);
+}
+
+(DST == "#rhnoise" && /^\.line /) {
+ sub(/\./, "!");
+ say($0);
+ say("scalawag: You slag!")
+}
+
+(DST == "#rhnoise" && /^\.qdb 268$/) {
+ say(".diediedie");
+ next
+}
+(DST == "#rhnoise" && /\.qdb *268/) {
+ say(".slap " FROM);
+ next
+}
+
+# Decrementer
+BEGIN {
+ user_scores[0] = 1;
+}
+
+/^\.(scores|scoreboard)$/ {
+ delete user_scores
+}
+
+FROM == "rhnoise" && !length(user_scores) {
+ if (split(MSG, _parts, /, /)) {
+ for (_i=1; _i<=length(_parts); _i++) {
+ split(_parts[_i], _tmp, ": ");
+ user_scores[_i]["user"] = _tmp[1];
+ user_scores[_i]["score"] = _tmp[2];
+ }
+ }
+}
+
+length(user_scores) &&
+tolower($0) ~ /\<nuclear launch detected\>/ {
+ _count = 0;
+ for (_i=1; _i<=length(user_scores); _i++) {
+ _user = user_scores[_i]["user"];
+ _score = user_scores[_i]["score"];
+ if (_user in USERS) continue
+ if (_score == 1) { say(_user "--"); _count++; }
+ if (_score == -1) { say(_user "++"); _count++; }
+ }
+ if (_count) {
+ delete user_scores;
+ say(".scores");
+ } else {
+ say("looks like you're safe.. for now..");
+ }
+}
+
+# Misc
{ fflush("") }
# vim: ft=awk