]> jfr.im git - irc/atheme/atheme.git/commitdiff
chanserv/flags: allow FLAGS #channel +o syntax for filtering flags list (closes ...
authorWilliam Pitcock <redacted>
Sat, 9 Aug 2014 00:03:02 +0000 (19:03 -0500)
committerWilliam Pitcock <redacted>
Sat, 9 Aug 2014 00:03:02 +0000 (19:03 -0500)
modules/chanserv/flags.c

index d03697bc7d7e0a8b0c1ed167982cda05f314033e..4b2c510798eb502d6ad685e798d455165ec4b720 100644 (file)
@@ -94,7 +94,7 @@ static const char *get_template_name(mychan_t *mc, unsigned int level)
        return iter.res;
 }
 
-static void do_list(sourceinfo_t *si, mychan_t *mc)
+static void do_list(sourceinfo_t *si, mychan_t *mc, unsigned int flags)
 {
        chanacs_t *ca;
        mowgli_node_t *n;
@@ -122,6 +122,10 @@ static void do_list(sourceinfo_t *si, mychan_t *mc)
                char mod_date[64];
 
                ca = n->data;
+
+               if (flags && !(ca->level & flags))
+                       continue;
+
                template = get_template_name(mc, ca->level);
                mod_ago = ca->tmodified ? time_ago(ca->tmodified) : "?";
 
@@ -179,9 +183,11 @@ static void cs_cmd_flags(sourceinfo_t *si, int parc, char *parv[])
                return;
        }
 
-       if (!target)
+       if (!target || (target && !is_valid_nick(target)))
        {
-               do_list(si, mc);
+               unsigned int flags = (target != NULL) ? flags_to_bitmask(target, 0) : 0;
+
+               do_list(si, mc, flags);
                return;
        }
 
@@ -214,7 +220,7 @@ static void cs_cmd_flags(sourceinfo_t *si, int parc, char *parv[])
         */
        else if (!strcasecmp(target, "LIST") && myentity_find_ext(target) == NULL)
        {
-               do_list(si, mc);
+               do_list(si, mc, 0);
                free(target);
 
                return;