]> jfr.im git - irc/quakenet/newserv.git/blob - chanserv/chancmds/banlist.c
More chanserv refactoring
[irc/quakenet/newserv.git] / chanserv / chancmds / banlist.c
1 /* Automatically generated by refactor.pl.
2 *
3 *
4 * CMDNAME: banlist
5 * CMDLEVEL: QCMD_AUTHED
6 * CMDARGS: 1
7 * CMDDESC: Displays all persistent bans on a channel.
8 * CMDFUNC: csc_dobanlist
9 * CMDPROTO: int csc_dobanlist(void *source, int cargc, char **cargv);
10 */
11
12 #include "../chanserv.h"
13 #include "../../nick/nick.h"
14 #include "../../lib/flags.h"
15 #include "../../lib/irc_string.h"
16 #include "../../channel/channel.h"
17 #include "../../parser/parser.h"
18 #include "../../irc/irc.h"
19 #include "../../localuser/localuserchannel.h"
20 #include <string.h>
21 #include <stdio.h>
22
23 int csc_dobanlist(void *source, int cargc, char **cargv) {
24 nick *sender=source;
25 chanindex *cip;
26 regchan *rcp;
27 regban *rbp;
28 reguser *rup;
29 chanban *cbp;
30 int i=0;
31 int exp;
32
33 if (cargc<1) {
34 chanservstdmessage(sender, QM_NOTENOUGHPARAMS, "banlist");
35 return CMD_ERROR;
36 }
37
38 if(!(cip=cs_checkaccess(sender, cargv[0], CA_OPPRIV, NULL, "banlist", 0, 0)))
39 return CMD_ERROR;
40
41 rcp=cip->exts[chanservext];
42
43 if (rcp->bans || cip->channel->bans) {
44 chanservstdmessage(sender, QM_REGBANHEADER, cip->name->content);
45 for(rbp=rcp->bans;rbp;rbp=rbp->next) {
46 rup=findreguserbyID(rbp->setby);
47 chanservsendmessage(sender," #%-2d %-29s %-18s %-15s %s",++i,bantostring(rbp->cbp),
48 rbp->expiry?longtoduration(rbp->expiry-time(NULL),0):"Permanent",
49 rup?rup->username:"<unknown>",
50 rbp->reason?rbp->reason->content:"");
51 }
52 for (cbp=cip->channel->bans;cbp;cbp=cbp->next) {
53 for (rbp=rcp->bans;rbp;rbp=rbp->next) {
54 if (banequal(rbp->cbp, cbp))
55 break;
56 }
57 if (!rbp) {
58 if (rcp->banduration) {
59 exp=(cbp->timeset + rcp->banduration) - time(NULL);
60 } else {
61 exp=0;
62 }
63 chanservsendmessage(sender, " #%-2d %-29s %-18s %-15s",++i,bantostring(cbp),
64 exp ? longtoduration(exp,0) : "Permanent",
65 "(channel ban)");
66 }
67 }
68 chanservstdmessage(sender, QM_ENDOFLIST);
69 } else {
70 chanservstdmessage(sender, QM_NOBANS, cip->name->content);
71 }
72
73 return CMD_OK;
74 }