]> Pileus Git - ~andy/rhawk/commitdiff
Improve input parsing
authorAndy Spencer <andy753421@gmail.com>
Thu, 25 Apr 2013 07:50:18 +0000 (07:50 +0000)
committerAndy Spencer <andy753421@gmail.com>
Thu, 25 Apr 2013 07:50:18 +0000 (07:50 +0000)
irc.awk
rhawk

diff --git a/irc.awk b/irc.awk
index 17f0fb44eaa878b8f5e9d087144b85060208c784..2f5d220c0934c59e443d89ebe0885b2df306cef3 100644 (file)
--- a/irc.awk
+++ b/irc.awk
@@ -36,15 +36,16 @@ function debug(msg) {
        fflush()
 }
 
-function set() {
+function set(i) {
        debug("CMD:  [" CMD  "]")
        debug("SRC:  [" SRC  "]")
        debug("DST:  [" DST  "]")
        debug("FROM: [" FROM "]")
        debug("TO:   [" TO   "]")
-       debug("ARG:  [" ARG  "]")
        debug("MSG:  [" MSG  "]")
        debug("$0:   [" $0   "]")
+       for (i in ARG)
+               debug("ARG"i": [" ARG[i] "]")
 }
 
 # Functions
@@ -132,16 +133,19 @@ function reload() {
        gsub(/\s+/,     " ")
        gsub(/^ | $/,    "")
        gsub(/\3[0-9]*/, "")
-       match($0, /(:([^ ]+) +)?(([A-Z0-9]+) +)(([^ ]+) +)?(([^: ]+) +)?(:(.*))/, arr);
+       match($0, /(:([^ ]+) )?([A-Z0-9]+)(( [^:][^ ]*)*)( :(.*))?/, arr);
+       sub(/^ /, "", arr[4])
        SRC = arr[2]
-       CMD = arr[4]
-       DST = arr[6]
-       ARG = arr[8]
-       MSG = arr[10]
+       CMD = arr[3]
+       MSG = arr[7]
+
+       split(arr[4], ARG)
+       DST = ARG[1]
 
        match(SRC, /([^! ]+)!([^@ ]+)@([^ ]+\/[^ ]+)?/, arr);
        FROM = arr[1]
-       AUTH = arr[3]
+       USER = arr[2]
+       HOST = arr[3]
 
        match(MSG, /(([^ :,]*)[:,] *)?(.*)/, arr);
        TO  = arr[2]
@@ -164,7 +168,6 @@ CMD == "PING" {
 
 CMD == "332" {
        CMD = "TOPIC"
-       DST = ARG
 }
 
 CMD == "TOPIC" {
diff --git a/rhawk b/rhawk
index 3186f99f62b32f61a0cc2e403d6686ced9065cad..46e2c658bd4e22cecdc1bde3fee326cc90a232ca 100755 (executable)
--- a/rhawk
+++ b/rhawk
@@ -48,7 +48,7 @@ FROM == OWNER && TO == NICK && /^\.msg/ {
 }
 
 # Kick handling
-CMD == "KICK" && ARG == NICK {
+CMD == "KICK" && ARG[2] == NICK {
        kick_delay = (kick_delay + 2) * 2
        system("sleep " kick_delay)
        join(DST)