]>
jfr.im git - irc/quakenet/newserv.git/blob - chanserv/chancmds/recover.c
1 /* Automatically generated by refactor.pl.
5 * CMDLEVEL: QCMD_AUTHED
7 * CMDDESC: Recovers a channel (same as deopall, unbanall, clearchan).
8 * CMDFUNC: csc_dorecover
9 * CMDPROTO: int csc_dorecover(void *source, int cargc, char **cargv);
10 * CMDHELP: Usage: RECOVER <channel>
11 * CMDHELP: This command resets the named channel if undesired modes, bans or ops have been
12 * CMDHELP: set. This has the same effect as DEOPALL followed by UNBANALL followed by
13 * CMDHELP: CLEARCHAN on the channel, where:
14 * CMDHELP: channel - channel to recover
15 * CMDHELP: RECOVER requires master (+m) access on the named channel.
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"
29 int csc_dorecover(void *source
, int cargc
, char **cargv
) {
30 nick
*sender
=source
,*np
;
40 chanservstdmessage(sender
, QM_NOTENOUGHPARAMS
, "recover");
44 if (!(cip
=cs_checkaccess(sender
, cargv
[0], CA_MASTERPRIV
, NULL
, "recover",0, 0)))
47 rcp
=cip
->exts
[chanservext
];
50 localsetmodeinit(&changes
, cip
->channel
, chanservnick
);
53 localdosetmode_key(&changes
, NULL
, MCB_DEL
);
54 localdosetmode_simple(&changes
, 0, cip
->channel
->flags
);
55 cs_docheckchanmodes(cip
->channel
, &changes
);
58 while (cip
->channel
->bans
) {
59 localdosetmode_ban(&changes
, bantostring(cip
->channel
->bans
), MCB_DEL
);
62 /* remove the registered bans that match on me */
63 cs_unbanfn(sender
, cip
, (UnbanFN
)nickmatchban
, sender
, 1, 0);
66 for (i
=0,lp
=cip
->channel
->users
->content
;
67 i
<cip
->channel
->users
->hashsize
;i
++,lp
++) {
68 if (*lp
!=nouser
&& (*lp
& CUMODE_OP
)) {
69 if (!(np
=getnickbynumeric(*lp
)) ||
70 (!IsService(np
) && (!(rup
=getreguserfromnick(np
)) ||
71 !(rcup
=findreguseronchannel(rcp
, rup
)) || !(CUHasOpPriv(rcup
)) ||
72 !(CUIsProtect(rcup
) || CIsProtect(rcp
))))) {
73 localdosetmode_nick(&changes
, np
, MC_DEOP
);
78 localsetmodeflush(&changes
, 1);
81 cs_log(sender
,"RECOVER %s",cip
->name
->content
);
82 chanservstdmessage(sender
, QM_DONE
);