]> arthur.barton.de Git - ngircd-alex.git/blobdiff - src/ngircd/channel.c
LUSERS reply: only count "visible" channels
[ngircd-alex.git] / src / ngircd / channel.c
index 74c97a0a8dc41abe99c30981d0f840402f040df9..4d323f274c46b10d7917c7cab5e347f6a85bc8fd 100644 (file)
@@ -352,20 +352,31 @@ Channel_Quit( CLIENT *Client, const char *Reason )
 } /* Channel_Quit */
 
 
+/**
+ * Get number of channels this server knows and that are "visible" to
+ * the given client. If no client is given, all channels will be counted.
+ *
+ * @param Client The client to check or NULL.
+ * @return Number of channels visible to the client.
+ */
 GLOBAL unsigned long
-Channel_Count( void )
+Channel_CountVisible (CLIENT *Client)
 {
        CHANNEL *c;
        unsigned long count = 0;
 
        c = My_Channels;
-       while( c )
-       {
-               count++;
+       while(c) {
+               if (Client) {
+                       if (!strchr(Channel_Modes(c), 's')
+                           || Channel_IsMemberOf(c, Client))
+                               count++;
+               } else
+                       count++;
                c = c->next;
        }
        return count;
-} /* Channel_Count */
+}
 
 
 GLOBAL unsigned long
@@ -1003,7 +1014,7 @@ Channel_AddBan(CHANNEL *c, const char *mask )
 {
        struct list_head *h = Channel_GetListBans(c);
        LogDebug("Adding \"%s\" to \"%s\" %s list", mask, Channel_Name(c), "ban");
-       return Lists_Add(h, mask, false);
+       return Lists_Add(h, mask, false, NULL);
 }
 
 
@@ -1012,7 +1023,7 @@ Channel_AddInvite(CHANNEL *c, const char *mask, bool onlyonce)
 {
        struct list_head *h = Channel_GetListInvites(c);
        LogDebug("Adding \"%s\" to \"%s\" %s list", mask, Channel_Name(c), "invite");
-       return Lists_Add(h, mask, onlyonce);
+       return Lists_Add(h, mask, onlyonce, NULL);
 }