]>
jfr.im git - irc/quakenet/newserv.git/blob - chanserv/chancmds/removeuser.c
1 /* Automatically generated by refactor.pl.
5 * CMDLEVEL: QCMD_AUTHED
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 * CMDHELP: Usage: REMOVEUSER <channel> <user1> [<user2> [<user3> [...]]]
11 * CMDHELP: Removes any flags the named user(s) have on the channel. This command
12 * CMDHELP: cannot be used to remove owners (+n) from the channel, and cannot be used
13 * CMDHELP: to remove masters (+m) unless the user issuing the command is an owner.
15 * CMDHELP: channel - channel to use
16 * CMDHELP: user<n> - a user to remove. Can either be a nickname on the network
17 * CMDHELP: or #authname. Up to 18 users can be specified.
18 * CMDHELP: REMOVEUSER requires master (+m) access on the named channel.
21 #include "../chanserv.h"
22 #include "../../nick/nick.h"
23 #include "../../lib/flags.h"
24 #include "../../lib/irc_string.h"
25 #include "../../channel/channel.h"
26 #include "../../parser/parser.h"
27 #include "../../irc/irc.h"
28 #include "../../localuser/localuserchannel.h"
32 int csc_doremoveuser(void *source
, int cargc
, char **cargv
) {
45 chanservstdmessage(sender
, QM_NOTENOUGHPARAMS
, "removeuser");
49 if (!(cip
=cs_checkaccess(sender
, cargv
[0], CA_MASTERPRIV
, NULL
, "removeuser", QPRIV_CHANGECHANLEV
, 0)))
52 if (cs_checkaccess(sender
, NULL
, CA_OWNERPRIV
, cip
, "removeuser", QPRIV_CHANGECHANLEV
, 1))
55 rcp
=cip
->exts
[chanservext
];
57 for (i
=1;i
<cargc
;i
++) {
58 if (!(rup
=findreguser(sender
, cargv
[i
])))
61 if (!(rcup
=findreguseronchannel(rcp
, rup
))) {
62 chanservstdmessage(sender
, QM_CHANUSERUNKNOWN
, cargv
[i
], cip
->name
->content
);
66 if (CUIsOwner(rcup
) && !cs_privcheck(QPRIV_CHANGECHANLEV
, sender
)) {
67 chanservstdmessage(sender
, QM_CANNOTREMOVEOWNER
, cargv
[i
], cip
->name
->content
);
71 if (CUIsMaster(rcup
) && !isowner
&& (rup
!= getreguserfromnick(sender
))) {
72 chanservstdmessage(sender
, QM_CANNOTREMOVEMASTER
, cargv
[i
], cip
->name
->content
);
76 cs_log(sender
,"CHANLEV %s #%s -%s (%s -> +)",cip
->name
->content
,rup
->username
,
77 printflags_noprefix(rcup
->flags
, rcuflags
), printflags(rcup
->flags
, rcuflags
));
84 args
[2]=(void *)oldflags
;
86 triggerhook(HOOK_CHANSERV_CHANLEVMOD
, args
);
88 csdb_deletechanuser(rcup
);
89 delreguserfromchannel(rcp
, rup
);
90 csdb_chanlevhistory_insert(rcp
, sender
, rcup
->user
, rcup
->flags
, 0);
94 rcp
->status
|= QCSTAT_OPCHECK
;
98 if (cs_removechannelifempty(sender
, rcp
)) {
99 chanservstdmessage(sender
, QM_CHANLEVEMPTIEDCHANNEL
);
101 chanservstdmessage(sender
, QM_DONE
);