]> jfr.im git - irc/quakenet/newserv.git/blob - chanserv/chancmds/removeuser.c
More chanserv refactoring
[irc/quakenet/newserv.git] / chanserv / chancmds / removeuser.c
1 /* Automatically generated by refactor.pl.
2 *
3 *
4 * CMDNAME: removeuser
5 * CMDLEVEL: QCMD_AUTHED
6 * CMDARGS: 20
7 * CMDDESC: Removes one or more users from a channel.
8 * CMDFUNC: csc_doremoveuser
9 * CMDPROTO: int csc_doremoveuser(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_doremoveuser(void *source, int cargc, char **cargv) {
24 nick *sender=source;
25 chanindex *cip;
26 regchanuser *rcup;
27 regchan *rcp;
28 reguser *rup;
29 int isowner=0;
30 int i;
31
32 if (cargc<2) {
33 chanservstdmessage(sender, QM_NOTENOUGHPARAMS, "removeuser");
34 return CMD_ERROR;
35 }
36
37 if (!(cip=cs_checkaccess(sender, cargv[0], CA_MASTERPRIV, NULL, "adduser", QPRIV_CHANGECHANLEV, 0)))
38 return CMD_ERROR;
39
40 if (cs_checkaccess(sender, NULL, CA_OWNERPRIV, cip, "adduser", QPRIV_CHANGECHANLEV, 1))
41 isowner=1;
42
43 rcp=cip->exts[chanservext];
44
45 for (i=1;i<cargc;i++) {
46 if (!(rup=findreguser(sender, cargv[i])))
47 continue;
48
49 if (!(rcup=findreguseronchannel(rcp, rup))) {
50 chanservstdmessage(sender, QM_CHANUSERUNKNOWN, cargv[i], cip->name->content);
51 continue;
52 }
53
54 if (CUIsOwner(rcup)) {
55 chanservstdmessage(sender, QM_CANNOTREMOVEOWNER, cargv[i], cip->name->content);
56 continue;
57 }
58
59 if (CUIsMaster(rcup) && !isowner && (rup != getreguserfromnick(sender))) {
60 chanservstdmessage(sender, QM_CANNOTREMOVEMASTER, cargv[i], cip->name->content);
61 continue;
62 }
63
64 cs_log(sender,"CHANLEV %s #%s -%s (%s -> +)",cip->name->content,rup->username,
65 printflags_noprefix(rcup->flags, rcuflags), printflags(rcup->flags, rcuflags));
66
67 csdb_deletechanuser(rcup);
68 delreguserfromchannel(rcp, rup);
69 }
70
71 rcp->status |= QCSTAT_OPCHECK;
72 cs_timerfunc(cip);
73
74 chanservstdmessage(sender, QM_DONE);
75
76 return CMD_OK;
77 }