# Debugging
function send(msg) {
- #print " > " msg > "/dev/stderr"
+ print " > " msg > "/dev/stderr"
print msg
- #system("sleep 1")
+ if (!DEBUG)
+ system("sleep 1")
fflush()
}
// {
#print "" > "/dev/stderr"
- #print " < " $0 > "/dev/stderr"
+ print " < " $0 > "/dev/stderr"
}
function debug(msg) {
}
function set() {
- debug("CMD: " CMD)
- debug("SRC: " SRC)
- debug("DST: " DST)
- debug("FROM: " FROM)
- debug("TO: " TO)
- debug("MSG: " MSG)
+ debug("CMD: [" CMD "]")
+ debug("SRC: [" SRC "]")
+ debug("DST: [" DST "]")
+ debug("FROM: [" FROM "]")
+ debug("TO: [" TO "]")
+ debug("ARG: [" ARG "]")
+ debug("MSG: [" MSG "]")
+ debug("$0: [" $0 "]")
}
# Functions
send("NICK " nick)
}
}
-function privmsg(to, msg) {
+
+function say(to, msg) {
+ if (msg == "") {
+ msg = to
+ if (DST ~ "^#")
+ to = DST
+ else if (DST == NICK && FROM)
+ to = FROM
+ else
+ to = CHANNEL
+ }
send("PRIVMSG " to " :" msg)
}
-function say(msg) {
- if (DST ~ "^#")
- privmsg(DST, msg)
- else if (DST == NICK && FROM)
- privmsg(FROM, msg)
+
+function action(to, msg)
+{
+ if (msg)
+ say(to, "\001ACTION " msg "\001")
else
- privmsg(CHANNEL, msg)
+ say("\001ACTION " to "\001")
}
function reply(msg) {
function join(chan) {
send("JOIN " chan)
+ send("TOPIC " chan)
}
function part(chan) {
send("PART " chan)
}
+function topic(chan, msg) {
+ send("TOPIC " chan " :" msg)
+}
+
# Reloading
BEGIN {
if (CHILD == "") {
debug("Starting server");
- status = system("awk -f rhawk -v CHILD=1 -v FIRST=1");
+ cmd = "awk -f rhawk" \
+ " -v CHILD=1" \
+ " -v START=" systime() \
+ " -v DEBUG=" !!DEBUG
+ status = system(cmd " -v FIRST=1");
while (status)
- status = system("awk -f rhawk -v CHILD=1");
+ status = system(cmd);
exit(0);
} else {
- debug("Starting child: CHILD=" CHILD " FIRST=" FIRST);
+ debug("Starting child:" \
+ " DEBUG=" DEBUG \
+ " CHILD=" CHILD \
+ " START=" START \
+ " FIRST=" FIRST);
}
}
# Input parsing
// {
- match($0, /(:([^ ]+) +)?(([A-Z0-9]+) +)(([^ ]+) +)?([^:]*:(.*))/, arr);
- gsub(/\s+/, " ", arr[8])
- gsub(/^ | $/, "", arr[8])
- gsub(/\3[0-9]*/, "", arr[8])
+ gsub(/\s+/, " ")
+ gsub(/^ | $/, "")
+ gsub(/\3[0-9]*/, "")
+ match($0, /(:([^ ]+) +)?(([A-Z0-9]+) +)(([^ ]+) +)?(([^: ]+) +)?(:(.*))/, arr);
SRC = arr[2]
CMD = arr[4]
DST = arr[6]
- MSG = arr[8]
+ ARG = arr[8]
+ MSG = arr[10]
- match(SRC, /([^! ]+)!/, arr);
+ match(SRC, /([^! ]+)!([^@ ]+)@([^ ]+\/[^ ]+)?/, arr);
FROM = arr[1]
+ AUTH = arr[3]
match(MSG, /(([^ :,]*)[:,] *)?(.*)/, arr);
TO = arr[2]
- $0 = TO == NICK ? arr[3] : MSG
+ $0 = TO ? arr[3] : MSG
- if (CMD == "PRIVMSG" && DST == NICK && FROM)
+ if (CMD == "PRIVMSG" && DST == NICK && FROM && !TO)
TO = DST
+
+ #set()
}
# IRC client
CMD == "PING" {
send("PING " MSG)
}
+
+CMD == "332" {
+ CMD = "TOPIC"
+ DST = ARG
+}
+
+CMD == "TOPIC" {
+ topics[DST] = MSG
+}