X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=irc.awk;h=d4bb41e1f2dde228e23235a0e13ab57d0f114b01;hb=6d31661edfd81e23d36f2a393144d1a70419a752;hp=2f5d220c0934c59e443d89ebe0885b2df306cef3;hpb=7eb267b1b1dd3ae5212cf852eb8f46c15feb2f68;p=~andy%2Frhawk diff --git a/irc.awk b/irc.awk index 2f5d220..d4bb41e 100644 --- a/irc.awk +++ b/irc.awk @@ -21,8 +21,6 @@ function send(msg) { print " > " msg > "/dev/stderr" print msg - if (!DEBUG) - system("sleep 1") fflush() } @@ -49,7 +47,7 @@ function set(i) { } # Functions -function connect(server, nick, channel) { +function connect(server, nick, channel, auth, pass) { SERVER = server NICK = nick CHANNEL = channel @@ -58,6 +56,12 @@ function connect(server, nick, channel) { "hostname" | getline _host send("USER " _name " " _host " " server " :" nick) send("NICK " nick) + send("CAP REQ :account-notify") + send("CAP REQ :extended-join") + send("CAP END") + say("NickServ", "IDENTIFY " pass) + } else { + send("WHOIS " nick) } } @@ -72,6 +76,8 @@ function say(to, msg) { to = CHANNEL } send("PRIVMSG " to " :" msg) + if (!DEBUG && NR > 1) + system("sleep 1") } function action(to, msg) @@ -89,6 +95,7 @@ function reply(msg) { function join(chan) { send("JOIN " chan) send("TOPIC " chan) + send("WHO " chan " %uhnar") } function part(chan) { @@ -130,9 +137,10 @@ function reload() { # Input parsing // { - gsub(/\s+/, " ") - gsub(/^ | $/, "") - gsub(/\3[0-9]*/, "") + gsub(/\s+/, " ") + gsub(/^ | $/, "") + gsub(/[\2\11\17\23\25\26\37]/, "") + gsub(/[\3\13](1[0-5]|0?[0-9])?(,(1[0-5]|0?[0-9]))?/, "") match($0, /(:([^ ]+) )?([A-Z0-9]+)(( [^:][^ ]*)*)( :(.*))?/, arr); sub(/^ /, "", arr[4]) SRC = arr[2] @@ -154,6 +162,11 @@ function reload() { if (CMD == "PRIVMSG" && DST == NICK && FROM && !TO) TO = DST + if (FROM in USERS) + AUTH = USERS[FROM]["auth"] + else + AUTH = "" + #set() } @@ -167,9 +180,51 @@ CMD == "PING" { } CMD == "332" { - CMD = "TOPIC" + TOPICS[ARG[2]] = MSG } CMD == "TOPIC" { - topics[DST] = MSG + TOPICS[ARG[1]] = MSG +} + +# Authentication +# todo - netsplits +CMD == "319" { + gsub(/[@+]/, "") + for (i=1; i<=NF; i++) + send("WHO " $i " %uhnar") + for (i=1; i<=NF; i++) + send("TOPIC " $i) +} + +CMD == "ACCOUNT" { + _auth = ARG[1] == "*" ? 0 : ARG[1] + USERS[FROM]["auth"] = _auth +} + +CMD == "354" { + _auth = ARG[5] == "*" ? 0 : ARG[5] + USERS[ARG[4]]["user"] = ARG[2] + USERS[ARG[4]]["host"] = ARG[3] + USERS[ARG[4]]["nick"] = ARG[4] + USERS[ARG[4]]["auth"] = _auth + USERS[ARG[4]]["real"] = MSG +} + +CMD == "JOIN" { + _auth = ARG[2] == "*" ? 0 : ARG[2] + USERS[FROM]["user"] = USER + USERS[FROM]["host"] = HOST + USERS[FROM]["nick"] = FROM + USERS[FROM]["auth"] = _auth + USERS[FROM]["real"] = MSG +} + +CMD == "NICK" { + USERS[MSG]["user"] = USERS[FROM]["user"] + USERS[MSG]["host"] = USERS[FROM]["host"] + USERS[MSG]["nick"] = MSG + USERS[MSG]["auth"] = USERS[FROM]["auth"] + USERS[MSG]["real"] = USERS[FROM]["real"] + delete USERS[FROM] }