From: Michael Poole Date: Fri, 6 Mar 2009 12:28:57 +0000 (-0500) Subject: Update users' "present" and "seen" fields when unsuspending a channel. X-Git-Url: http://git.pk910.de/?p=srvx.git;a=commitdiff_plain;h=016bb9b69c98294a7ebda06cca87e12e06f773e3 Update users' "present" and "seen" fields when unsuspending a channel. Bug reported by ZeRoFiGhter. src/chanserv.c (chanserv_expire_suspension): Add some comments. Add a loop to update presence information for anyone in the channel at the time the channel is unsuspended. --- diff --git a/src/chanserv.c b/src/chanserv.c index 8ff71ab..2780729 100644 --- a/src/chanserv.c +++ b/src/chanserv.c @@ -4942,12 +4942,16 @@ chanserv_expire_suspension(void *data) { struct suspended *suspended = data; struct chanNode *channel; + unsigned int ii; + /* Update the channel registration data structure. */ if(!suspended->expires || (now < suspended->expires)) suspended->revoked = now; channel = suspended->cData->channel; suspended->cData->channel = channel; suspended->cData->flags &= ~CHANNEL_SUSPENDED; + + /* If appropriate, re-join ChanServ to the channel. */ if(!IsOffChannel(suspended->cData)) { struct mod_chanmode change; @@ -4957,6 +4961,17 @@ chanserv_expire_suspension(void *data) change.args[0].u.member = AddChannelUser(chanserv, channel); mod_chanmode_announce(chanserv, channel, &change); } + + /* Mark everyone currently in the channel as present. */ + for(ii = 0; ii < channel->members.used; ++ii) + { + struct userData *uData = GetChannelAccess(suspended->cData, channel->members.list[ii]->user->handle_info); + if(uData) + { + uData->present = 1; + uData->seen = now; + } + } } static CHANSERV_FUNC(cmd_csuspend)