]> jfr.im git - irc/quakenet/newserv.git/blame - chanserv/chancmds/deopall.c
TRUSTS: use correct socket opt...
[irc/quakenet/newserv.git] / chanserv / chancmds / deopall.c
CommitLineData
1dd6d55d 1/* Automatically generated by refactor.pl.
2 *
3 *
4 * CMDNAME: deopall
5 * CMDLEVEL: QCMD_AUTHED
6 * CMDARGS: 1
7 * CMDDESC: Deops all users on channel.
8 * CMDFUNC: csc_dodeopall
9 * CMDPROTO: int csc_dodeopall(void *source, int cargc, char **cargv);
1e32d528 10 * CMDHELP: Usage: DEOPALL <channel>
11 * CMDHELP: Deops every user in the channel. Registered channel operators (+o on CHANLEV)
12 * CMDHELP: who are protected (via the +p flag in CHANLEV or CHANFLAGS) will not be deopped.
13 * CMDHELP: Where:
14 * CMDHELP: channel - channel to use
15 * CMDHELP: DEOPALL requires master (+m) access on the named channel.
1dd6d55d 16 */
17
18#include "../chanserv.h"
19#include "../../nick/nick.h"
20#include "../../lib/flags.h"
21#include "../../lib/irc_string.h"
22#include "../../channel/channel.h"
23#include "../../parser/parser.h"
24#include "../../irc/irc.h"
25#include "../../localuser/localuserchannel.h"
26#include <string.h>
27#include <stdio.h>
28
29int csc_dodeopall(void *source, int cargc, char **cargv) {
30 nick *sender=source,*np;
31 reguser *rup;
32 regchanuser *rcup;
33 regchan *rcp;
34 chanindex *cip;
35 unsigned long *lp;
36 int i;
37 modechanges changes;
38
39 if (cargc<1) {
40 chanservstdmessage(sender, QM_NOTENOUGHPARAMS, "deopall");
41 return CMD_ERROR;
42 }
43
44 if (!(cip=cs_checkaccess(sender, cargv[0], CA_MASTERPRIV, NULL, "deopall",0, 0)))
45 return CMD_ERROR;
46
47 rcp=cip->exts[chanservext];
48
49 if (cip->channel) {
50 localsetmodeinit(&changes, cip->channel, chanservnick);
51
52 for (i=0,lp=cip->channel->users->content;
53 i<cip->channel->users->hashsize;i++,lp++) {
54 if (*lp!=nouser && (*lp & CUMODE_OP)) {
55 if (!(np=getnickbynumeric(*lp)) ||
56 (!IsService(np) && (!(rup=getreguserfromnick(np)) ||
57 !(rcup=findreguseronchannel(rcp, rup)) || !(CUHasOpPriv(rcup)) ||
58 !(CUIsProtect(rcup) || CIsProtect(rcp))))) {
59 localdosetmode_nick(&changes, np, MC_DEOP);
60 }
61 }
62 }
63
64 localsetmodeflush(&changes, 1);
65 }
66
67 cs_log(sender,"DEOPALL %s",cip->name->content);
68 chanservstdmessage(sender, QM_DONE);
69 return CMD_OK;
70}