]> jfr.im git - irc/quakenet/newserv.git/blob - chanserv/usercmds/listflags.c
More chanserv refactoring
[irc/quakenet/newserv.git] / chanserv / usercmds / listflags.c
1 /* Automatically generated by refactor.pl.
2 *
3 *
4 * CMDNAME: listflags
5 * CMDLEVEL: QCMD_OPER
6 * CMDARGS: 1
7 * CMDDESC: List users with the specified user flags.
8 * CMDFUNC: csu_dolistflags
9 * CMDPROTO: int csu_dolistflags(void *source, int cargc, char **cargv);
10 */
11
12 #include "../chanserv.h"
13 #include "../../lib/irc_string.h"
14 #include <stdio.h>
15 #include <string.h>
16
17 int csu_dolistflags(void *source, int cargc, char **cargv) {
18 nick *sender=source;
19 reguser *rup=getreguserfromnick(sender);
20 reguser *dbrup;
21 flag_t matchflags = 0;
22 char *ch;
23 int i, j;
24 unsigned int count=0;
25
26 if (!rup)
27 return CMD_ERROR;
28
29 if (cargc < 1) {
30 chanservstdmessage(sender, QM_NOTENOUGHPARAMS, "listflags");
31 return CMD_ERROR;
32 }
33
34 ch=cargv[0][0]=='+'?cargv[0]+1:cargv[0];
35
36 for (i=0; ch[i]; i++) {
37 for (j = 0; ruflags[j].flagchar; j++) {
38 if (ruflags[j].flagchar == ch[i]) {
39 matchflags|=ruflags[j].flagbit;
40 break;
41 }
42 }
43 }
44
45 chanservstdmessage(sender, QM_LISTFLAGSHEADER);
46 for (i=0;i<REGUSERHASHSIZE;i++) {
47 for (dbrup=regusernicktable[i]; dbrup; dbrup=dbrup->nextbyname) {
48 if ((dbrup->flags & matchflags) == matchflags) {
49 chanservsendmessage(sender, "%-15s %-17s %-10s %-30s %s", dbrup->username, printflags(dbrup->flags, ruflags),
50 UHasSuspension(dbrup)?"yes":"no", dbrup->email?dbrup->email->content:"none set",
51 dbrup->lastuserhost?dbrup->lastuserhost->content:"none");
52 count++;
53 if (count >= 2000) {
54 chanservstdmessage(sender, QM_TOOMANYRESULTS, 2000, "users");
55 return CMD_ERROR;
56 }
57 }
58 }
59 }
60 chanservstdmessage(sender, QM_RESULTCOUNT, count, "user", (count==1)?"":"s");
61
62 return CMD_OK;
63 }