X-Git-Url: http://git.pk910.de/?p=NeonServV5.git;a=blobdiff_plain;f=src%2FIRCParser.c;fp=src%2FIRCParser.c;h=fc6b607cbf2e98c8ce3bba734090cf4eec9dcf31;hp=bf7755142b7f9f7049a4a77fba4ce41b950dc7dd;hb=15d3e663d09e801fed79a8af7165e1698a377f8e;hpb=1f6e87eb386623e4d994e2e245d4ba2676002e1f diff --git a/src/IRCParser.c b/src/IRCParser.c index bf77551..fc6b607 100644 --- a/src/IRCParser.c +++ b/src/IRCParser.c @@ -404,11 +404,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