ChanServ seen fixes; other cleanups
[srvx.git] / src / chanserv.c
index 5cc98b41aadf9e68933d2a6dbf8e1f2fcf650418..8ad057af26ba089d123e4f2c041adbf4321582b4 100644 (file)
@@ -5956,7 +5956,10 @@ handle_part(struct userNode *user, struct chanNode *channel, UNUSED_ARG(const ch
     }
 
     if((uData = GetTrueChannelAccess(cData, user->handle_info)))
+    {
        scan_user_presence(uData, user);
+        uData->seen = now;
+    }
 
     if(IsHelping(user) && IsSupportHelper(user))
     {
@@ -5977,6 +5980,8 @@ handle_part(struct userNode *user, struct chanNode *channel, UNUSED_ARG(const ch
 static void
 handle_kick(struct userNode *kicker, struct userNode *victim, struct chanNode *channel)
 {
+    struct userData *uData;
+
     if(!channel->channel_info || !kicker || IsService(kicker)
        || (kicker == victim) || IsSuspended(channel->channel_info)
        || (kicker->handle_info && kicker->handle_info == victim->handle_info))
@@ -5987,6 +5992,9 @@ handle_kick(struct userNode *kicker, struct userNode *victim, struct chanNode *c
         const char *reason = user_find_message(kicker, "CSMSG_USER_PROTECTED");
        KickChannelUser(kicker, channel, chanserv, reason);
     }
+
+    if((uData = GetTrueChannelAccess(channel->channel_info, victim->handle_info)))
+        uData->seen = now;
 }
 
 static int
@@ -6030,8 +6038,7 @@ handle_mode(struct chanNode *channel, struct userNode *user, const struct mod_ch
        && mode_lock_violated(&channel->channel_info->modes, change))
     {
         char correct[MAXLEN];
-        bounce = mod_chanmode_alloc(change->argc + 1);
-        *bounce = channel->channel_info->modes;
+        bounce = mod_chanmode_dup(&channel->channel_info->modes, change->argc + 1);
         mod_chanmode_format(&channel->channel_info->modes, correct);
         send_message(user, chanserv, "CSMSG_MODE_LOCKED", correct, channel->name);
     }