X-Git-Url: http://git.pk910.de/?a=blobdiff_plain;f=src%2FIRCParser.c;h=cb976ce2dec92afb480322642bb17644d71545f2;hb=583a691c9013cb442c1948ae0263be89c9fc6a95;hp=c8cd526a5b37dae8ca0f6f9c72f231ae18aa74a3;hpb=854e38b76f6ca963c0def2dd0e71153a56f2930c;p=NeonServV5.git diff --git a/src/IRCParser.c b/src/IRCParser.c index c8cd526..cb976ce 100644 --- a/src/IRCParser.c +++ b/src/IRCParser.c @@ -1,4 +1,4 @@ -/* IRCParser.c - NeonServ v5.5 +/* IRCParser.c - NeonServ v5.6 * Copyright (C) 2011-2012 Philipp Kreil (pk910) * * This program is free software: you can redistribute it and/or modify @@ -334,14 +334,18 @@ 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); 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 +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