]>
Commit | Line | Data |
---|---|---|
1dd6d55d | 1 | /* Automatically generated by refactor.pl. |
2 | * | |
3 | * | |
4 | * CMDNAME: info | |
3a744b8f | 5 | * CMDLEVEL: QCMD_AUTHED | QCMD_OPER |
1dd6d55d | 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); | |
50cd26d6 | 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. | |
1dd6d55d | 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 | ||
50ec21f3 | 63 | chanservstdmessage(sender, QM_GLOBALINFO, (rup->info && *rup->info->content)?rup->info->content:"(none)"); |
1dd6d55d | 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, | |
50ec21f3 | 92 | (rcup->info && *rcup->info->content)?rcup->info->content:"(none)"); |
1dd6d55d | 93 | } |
94 | ||
95 | return CMD_OK; | |
96 | } |