]> jfr.im git - irc/atheme/atheme.git/commitdiff
Add a field to channel structure to track the number of internal clients in the chann...
authorRyan Schoppmeyer <redacted>
Sun, 1 Feb 2015 09:07:07 +0000 (01:07 -0800)
committerWilliam Pitcock <redacted>
Mon, 2 Feb 2015 02:19:26 +0000 (20:19 -0600)
include/channels.h
libathemecore/channels.c

index 6b8b4459117596e3e507284d1a35619a893583f0..e13e4fa6e6d3d29df72c03f22bee76570f9f02fd 100644 (file)
@@ -25,6 +25,7 @@ struct channel_
   char **extmodes; /* non-standard simple modes with param eg +j */
 
   unsigned int nummembers;
+  unsigned int numsvcmembers;
 
   time_t ts;
 
index b80fb92a98701fa7fa973d3e77d571e02436f283..d7a365dd35e2aecc781685646d7e9258c9ecd6d4 100644 (file)
@@ -174,6 +174,7 @@ void channel_delete(channel_t *c)
                cnt.chanuser--;
        }
        c->nummembers = 0;
+       c->numsvcmembers = 0;
 
        hook_call_channel_delete(c);
 
@@ -400,6 +401,8 @@ chanuser_t *chanuser_add(channel_t *chan, const char *nick)
        cu->modes = flags;
 
        chan->nummembers++;
+       if (is_internal_client(u))
+               chan->numsvcmembers++;
 
        mowgli_node_add(cu, &cu->cnode, &chan->members);
        mowgli_node_add(cu, &cu->unode, &u->channels);
@@ -459,6 +462,9 @@ void chanuser_delete(channel_t *chan, user_t *user)
        chan->nummembers--;
        cnt.chanuser--;
 
+       if (is_internal_client(user))
+               chan->numsvcmembers--;
+
        if (chan->nummembers == 0 && !(chan->modes & ircd->perm_mode))
        {
                /* empty channels die */