#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;
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;
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) {
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))
} 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] == '<') {
|| (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)
) {
}
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)
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)