add id field to cmd_search
authorNurPech <nurpech@nurpech.de>
Sun, 1 Sep 2013 12:52:36 +0000 (14:52 +0200)
committerNurPech <nurpech@nurpech.de>
Sun, 1 Sep 2013 12:52:36 +0000 (14:52 +0200)
src/nickserv.c

index 089cc935daab316d7c9e22647c75e6f367205617..15c5743b663f04fed3bc8bd3562f62ede3765311 100644 (file)
@@ -3704,8 +3704,9 @@ static NICKSERV_FUNC(cmd_merge)
 #define NICKSERV_DISCRIM_FIELDS_FAKEHOST 0x10
 #define NICKSERV_DISCRIM_FIELDS_WEBSITE  0x20
 #define NICKSERV_DISCRIM_FIELDS_DEVNULL  0x40
+#define NICKSERV_DISCRIM_FIELDS_ID       0x80
 
-#define NICKSERV_DISCRIM_FIELD_COUNT     7
+#define NICKSERV_DISCRIM_FIELD_COUNT     8
 
 struct nickserv_discrim {
     unsigned int show_fields;
@@ -3718,6 +3719,7 @@ struct nickserv_discrim {
     unsigned long lastseen;
     unsigned int limit;
     int min_level, max_level;
+    unsigned int min_id, max_id;
     int min_karma, max_karma;
     enum { SUBSET, EXACT, SUPERSET, LASTQUIT } hostmask_type;
     const char *nickmask;
@@ -3756,6 +3758,9 @@ nickserv_discrim_create(struct userNode *user, unsigned int argc, char *argv[])
     discrim->lastseen = ULONG_MAX;
     discrim->min_karma = INT_MIN;
     discrim->max_karma = INT_MAX;
+    discrim->min_id = 0;
+    discrim->max_id = INT_MAX;
 
     for (i=0; i<argc; i++) {
         if (i == argc - 1) {
@@ -3780,6 +3785,8 @@ nickserv_discrim_create(struct userNode *user, unsigned int argc, char *argv[])
                     discrim->show_fields |= NICKSERV_DISCRIM_FIELDS_SEEN;
                 else if(!irccasecmp(fields, "access"))
                     discrim->show_fields |= NICKSERV_DISCRIM_FIELDS_ACCESS;
+                else if(!irccasecmp(fields, "id"))
+                     discrim->show_fields |= NICKSERV_DISCRIM_FIELDS_ID;
                 else if(!irccasecmp(fields, "fakehost"))
                     discrim->show_fields |= NICKSERV_DISCRIM_FIELDS_FAKEHOST;
                 else if(!irccasecmp(fields, "website") && IsBot(user))
@@ -3920,6 +3927,26 @@ nickserv_discrim_create(struct userNode *user, unsigned int argc, char *argv[])
             } else {
                 send_message(user, nickserv, "MSG_INVALID_CRITERIA", cmp);
             }
+        } else if (!irccasecmp(argv[i], "id")) {
+            const char *cmp = argv[++i];
+            if (cmp[0] == '<') {
+                if (discrim->min_id == 0) discrim->min_id = 1;
+                if (cmp[1] == '=') {
+                    discrim->max_id = strtoul(cmp+2, NULL, 0);
+                } else {
+                    discrim->max_id = strtoul(cmp+1, NULL, 0) - 1;
+                }
+            } else if (cmp[0] == '=') {
+                discrim->min_id = discrim->max_id = strtoul(cmp+1, NULL, 0);
+            } else if (cmp[0] == '>') {
+                if (cmp[1] == '=') {
+                    discrim->min_id = strtoul(cmp+2, NULL, 0);
+                } else {
+                    discrim->min_id = strtoul(cmp+1, NULL, 0) + 1;
+                }
+            } else {
+                send_message(user, nickserv, "MSG_INVALID_CRITERIA", cmp);
+            }
         } else if (!irccasecmp(argv[i], "karma")) {
             const char *cmp = argv[++i];
             if (cmp[0] == '<') {
@@ -3966,6 +3993,8 @@ nickserv_discrim_match(struct nickserv_discrim *discrim, struct handle_info *hi)
         || (discrim->emailmask && (!hi->email_addr || !match_ircglob(hi->email_addr, discrim->emailmask)))
         || (discrim->min_level > hi->opserv_level)
         || (discrim->max_level < hi->opserv_level)
+        || (discrim->min_id > hi->id)
+        || (discrim->max_id < hi->id)
         || (discrim->min_karma > hi->karma)
         || (discrim->max_karma < hi->karma)
         ) {
@@ -4042,6 +4071,8 @@ search_print_func(struct userNode *source, struct handle_info *match, struct nic
             }
             if(discrim->show_fields & NICKSERV_DISCRIM_FIELDS_ACCESS)
                 discrim->output_table->contents[discrim->output_table_pos][i++] = strtab(match->opserv_level);
+            if(discrim->show_fields & NICKSERV_DISCRIM_FIELDS_ID)
+                discrim->output_table->contents[discrim->output_table_pos][i++] = strtab(match->id);
             if(discrim->show_fields & NICKSERV_DISCRIM_FIELDS_FAKEHOST)
                 discrim->output_table->contents[discrim->output_table_pos][i++] = (match->fakehost ? match->fakehost : "*");
             if(discrim->show_fields & NICKSERV_DISCRIM_FIELDS_WEBSITE)
@@ -4176,6 +4207,8 @@ static NICKSERV_FUNC(cmd_search)
             discrim->output_table->contents[0][ii++] = "Seen";
         if(discrim->show_fields & NICKSERV_DISCRIM_FIELDS_ACCESS)
             discrim->output_table->contents[0][ii++] = "Access";
+        if(discrim->show_fields & NICKSERV_DISCRIM_FIELDS_ID)
+            discrim->output_table->contents[0][ii++] = "ID";
         if(discrim->show_fields & NICKSERV_DISCRIM_FIELDS_FAKEHOST)
             discrim->output_table->contents[0][ii++] = "Fakehost";
         if(discrim->show_fields & NICKSERV_DISCRIM_FIELDS_WEBSITE)