]> jfr.im git - irc/quakenet/newserv.git/blob - chanserv/chancmds/cleartopic.c
CHANSERV: Clarified behaviour of chanflag +f and empty topics.
[irc/quakenet/newserv.git] / chanserv / chancmds / cleartopic.c
1 /*
2 * CMDNAME: cleartopic
3 * CMDLEVEL: QCMD_AUTHED
4 * CMDARGS: 2
5 * CMDDESC: Clears the topic on a channel.
6 * CMDFUNC: csc_docleartopic
7 * CMDPROTO: int csc_docleartopic(void *source, int cargc, char **cargv);
8 * CMDHELP: Usage: CLEARTOPIC <channel>
9 * CMDHELP: Clears the topic on a channel, where:
10 * CMDHELP: channel - channel to use
11 * CMDHELP: CLEARTOPIC requires topic (+t) or master (+m) access on the named channel.
12 */
13
14 #include "../chanserv.h"
15 #include "../../nick/nick.h"
16 #include "../../lib/flags.h"
17 #include "../../lib/irc_string.h"
18 #include "../../channel/channel.h"
19 #include "../../parser/parser.h"
20 #include "../../irc/irc.h"
21 #include "../../localuser/localuserchannel.h"
22 #include <string.h>
23 #include <stdio.h>
24
25 int csc_docleartopic(void *source, int cargc, char **cargv) {
26 nick *sender=source;
27 chanindex *cip;
28 regchan *rcp;
29
30 if (cargc<1) {
31 chanservstdmessage(sender, QM_NOTENOUGHPARAMS, "cleartopic");
32 return CMD_ERROR;
33 }
34
35 if (!(cip=cs_checkaccess(sender, cargv[0], CA_TOPICPRIV,
36 NULL, "cleartopic", 0, 0)))
37 return CMD_ERROR;
38
39 rcp=cip->exts[chanservext];
40
41 if (rcp->topic)
42 freesstring(rcp->topic);
43
44 rcp->topic=NULL;
45
46 if (cip->channel) {
47 localsettopic(chanservnick, cip->channel, "");
48 }
49
50 chanservstdmessage(sender, QM_DONE);
51 csdb_updatechannel(rcp);
52 return CMD_OK;
53 }