fixed path of mysql/errmsg.h (OSX compilation fix)
[NeonServV5.git] / src / IRCParser.c
index 675dc40ae7d7d6b3a0a6f129c2e524e6bf12e2db..ff244a05043c98384c978b0dca68e8bca1a01be2 100644 (file)
@@ -334,14 +334,20 @@ static IRC_CMD(raw_join) {
         
         event_registered(user, from);
         user->flags &= ~USERFLAG_WAS_REGISTERING;
+        if(user->last_who > REWHO_TIMEOUT)
+            user->last_who -= REWHO_TIMEOUT;
+        
+        event_join(chanuser);
     } else if(!(chan->flags & CHANFLAG_RECEIVED_USERLIST)) {
         if(client->user != user) { //bots are allowed to add themselves
             DESYNCHRONIZE(cache_sync);
             return 1; //ignore join
         }
         
-        chanuser = addChanUser(chan, user);
-        chanuser->visCount = 1;
+        if(!(chanuser = getChanUser(user, chan))) {
+            chanuser = addChanUser(chan, user);
+        }
+        chanuser->visCount++;
         chan->botcount++;
         
         if(isModeSet(chan->modes, 'D')) //if the bot joins a channel it could also be invisible
@@ -402,11 +408,24 @@ static IRC_CMD(raw_part) {
         decrease_viscount_butone(chan, chanuser);
         chan->botcount--;
     }
+    if(chanuser->flags & CHANUSERFLAG_PARTING)
+        chanuser->old_visCount--;
     chanuser->visCount--;
     if(chanuser->visCount == 0) {
         delChanUser(chanuser, 0); //not free, yet!
         event_part(chanuser, 0, (argc > 1 ? argv[1] : NULL));
         freeChanUser(chanuser);
+    } else if(!(chanuser->flags & CHANUSERFLAG_PARTING)) {
+        chanuser->flags |= CHANUSERFLAG_PARTING;
+        chanuser->old_visCount = chanuser->visCount;
+    } else if(chanuser->old_visCount == 0) {
+        int visCount = chanuser->visCount;
+        delChanUser(chanuser, 0); //not free, yet!
+        event_part(chanuser, 0, (argc > 1 ? argv[1] : NULL));
+        freeChanUser(chanuser);
+        chanuser = addChanUser(chan, user);
+        chanuser->visCount = visCount;
+        event_join(chanuser);
     }
     
     //check if channel is still present