Update users' "present" and "seen" fields when unsuspending a channel.
authorMichael Poole <mdpoole@troilus.org>
Fri, 6 Mar 2009 12:28:57 +0000 (07:28 -0500)
committerMichael Poole <mdpoole@troilus.org>
Fri, 6 Mar 2009 12:28:57 +0000 (07:28 -0500)
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.

src/chanserv.c

index 8ff71ab5796816dfcd9eb94b76cffdcc7505b295..2780729b7c2e4d52b5b6865688da4d86cf9daea5 100644 (file)
@@ -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)