implemented the new events
[NeonServV5.git] / IRCParser.c
index 6e663e694cf18bc00418fd4c3c38adfd95b5607c..ac2cb60a2fe06f29736914a76d9a0302142d6775 100644 (file)
@@ -78,8 +78,10 @@ static void parse_raw(struct ClientSocket *client, char *from, char *cmd, char *
             break;
         }
     }
-    if(!ret) {
-        //fprintf(stderr,"PARSE ERROR: %s", cmd); commented out right now - we're still developing and this is very spammy
+    if(!irc_cmd) {
+        event_raw(client, from, cmd, argv, argc);
+    } else if(!ret) {
+        fprintf(stderr,"PARSE ERROR: %s", cmd);
     }
 }
 
@@ -224,12 +226,38 @@ static IRC_CMD(raw_privmsg) {
     }
     if(argv[0][0] == '#') { //Channel message
         struct ChanNode *chan = getChanByName(argv[0]);
-        if(chan && chan->chanbot == client->user)
-            event_chanmsg(user, chan, argv[1]);
+        if(chan && chan->chanbot == client->user) {
+            if(argv[1][0] == '\001') {
+                char *cmd = &argv[1][1];
+                char *text = strstr(cmd, " ");
+                if(text) {
+                    *text = '\0';
+                    text++;
+                    if(strlen(text) && text[strlen(text)-1] == '\001')
+                        text[strlen(text)-1] = '\0';
+                } else if(strlen(cmd) && cmd[strlen(cmd)-1] == '\001')
+                    cmd[strlen(cmd)-1] = '\0';
+                event_chanctcp(user, chan, cmd, text);
+            } else
+                event_chanmsg(user, chan, argv[1]);
+        }
     } else {
         struct UserNode *target = getUserByNick(argv[0]);
-        if(target)
-            event_privmsg(user, target, argv[1]);
+        if(target) {
+            if(argv[1][0] == '\001') {
+                char *cmd = &argv[1][1];
+                char *text = strstr(cmd, " ");
+                if(text) {
+                    *text = '\0';
+                    text++;
+                    if(strlen(text) && text[strlen(text)-1] == '\001')
+                        text[strlen(text)-1] = '\0';
+                } else if(strlen(cmd) && cmd[strlen(cmd)-1] == '\001')
+                    cmd[strlen(cmd)-1] = '\0';
+                event_privctcp(user, chan, cmd, text);
+            } else
+                event_privmsg(user, target, argv[1]);
+        }
     }
     return 1;
 }
@@ -277,9 +305,17 @@ static IRC_CMD(raw_315) {
     return 1;
 }
 
+static IRC_CMD(raw_invite) {
+    if(from == NULL || argc < 2) return 0;
+    struct UserNode *user = getUserByMask(from);
+    event_invite(user, argv[1]);
+    return 1;
+}
+
 void parser_init() {
     //all the raws we receive...
     register_irc_function("001", raw_001);
+    register_irc_function("INVITE", raw_invite);
     register_irc_function("NOTICE", raw_notice);
     register_irc_function("TOPIC", raw_topic);
     register_irc_function("KICK", raw_kick);