]> jfr.im git - irc/quakenet/newserv.git/blob - chanserv/usercmds/info.c
Merge pull request #132 from retropc/lua_country
[irc/quakenet/newserv.git] / chanserv / usercmds / info.c
1 /* Automatically generated by refactor.pl.
2 *
3 *
4 * CMDNAME: info
5 * CMDLEVEL: QCMD_AUTHED | QCMD_OPER
6 * CMDARGS: 2
7 * CMDDESC: Shows or changes info line.
8 * CMDFUNC: csu_doinfo
9 * CMDPROTO: int csu_doinfo(void *source, int cargc, char **cargv);
10 * CMDHELP: Usage: INFO [<channel>] [<info line>]
11 * CMDHELP: Shows or updates your current info line, which can be configured to be displayed
12 * CMDHELP: when you join a channel. Where:
13 * CMDHELP: channel - channel to set info line on. If no channel is specified, your default
14 * CMDHELP: info line will be used. If a channel is specified you must be known
15 * CMDHELP: (+k) on the channel.
16 * CMDHELP: info line - new info line to set. If not specified, the current info line will be
17 * CMDHELP: displayed. If \"none\" is specified, the info line will be cleared.
18 */
19
20 #include "../chanserv.h"
21 #include "../../lib/irc_string.h"
22 #include <stdio.h>
23 #include <string.h>
24
25 int csu_doinfo(void *source, int cargc, char **cargv) {
26 nick *sender=source;
27 reguser *rup=getreguserfromnick(sender);
28 chanindex *cip;
29 regchan *rcp;
30 regchanuser *rcup;
31 char linebuf[INFOLEN+10];
32 char *newline="";
33 int doupdate=0;
34
35 if (cargc==0 || *cargv[0]!='#') {
36 /* Global info line */
37 if (cargc==1) {
38 /* Setting to either one word or "none" */
39 if (!ircd_strcmp(cargv[0],"none")) {
40 newline="";
41 doupdate=1;
42 } else {
43 newline=cargv[0];
44 doupdate=1;
45 }
46 } else if (cargc>1) {
47 /* More than one word: we need to stick them back together */
48 snprintf(linebuf,INFOLEN,"%s %s",cargv[0],cargv[1]);
49 newline=linebuf;
50 doupdate=1;
51 }
52
53 if (doupdate) {
54 if (rup->info)
55 freesstring(rup->info);
56
57 rup->info=getsstring(newline, INFOLEN);
58
59 chanservstdmessage(sender, QM_DONE);
60 csdb_updateuser(rup);
61 }
62
63 chanservstdmessage(sender, QM_GLOBALINFO, (rup->info && *rup->info->content)?rup->info->content:"(none)");
64 } else {
65 /* Channel info line */
66
67 if (!(cip=findchanindex(cargv[0])) || !(rcp=cip->exts[chanservext]) ||
68 (CIsSuspended(rcp) && !cs_privcheck(QPRIV_SUSPENDBYPASS, sender))) {
69 chanservstdmessage(sender, QM_UNKNOWNCHAN, cargv[0]);
70 return CMD_ERROR;
71 }
72
73 if ((!(rcup=findreguseronchannel(rcp, rup)) || !CUHasVoicePriv(rcup))) {
74 chanservstdmessage(sender, QM_NOACCESSONCHAN, cargv[0], "info");
75 return CMD_ERROR;
76 }
77
78 if (cargc>1) {
79 if (rcup->info)
80 freesstring(rcup->info);
81
82 if (!ircd_strcmp(cargv[1],"none"))
83 rcup->info=NULL;
84 else
85 rcup->info=getsstring(cargv[1],INFOLEN);
86
87 csdb_updatechanuser(rcup);
88 chanservstdmessage(sender, QM_DONE);
89 }
90
91 chanservstdmessage(sender, QM_CHANNELINFO, cip->name->content,
92 (rcup->info && *rcup->info->content)?rcup->info->content:"(none)");
93 }
94
95 return CMD_OK;
96 }