trigger join event on Registered rejoin
[NeonServV5.git] / src / IRCParser.c
index bf7755142b7f9f7049a4a77fba4ce41b950dc7dd..cb976ce2dec92afb480322642bb17644d71545f2 100644 (file)
@@ -334,6 +334,8 @@ static IRC_CMD(raw_join) {
         
         event_registered(user, from);
         user->flags &= ~USERFLAG_WAS_REGISTERING;
+        
+        event_join(chanuser);
     } else if(!(chan->flags & CHANFLAG_RECEIVED_USERLIST)) {
         if(client->user != user) { //bots are allowed to add themselves
             DESYNCHRONIZE(cache_sync);
@@ -404,11 +406,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