]> jfr.im git - irc/quakenet/newserv.git/blob - chanserv/chanservstdcmds.c
Add jupe support
[irc/quakenet/newserv.git] / chanserv / chanservstdcmds.c
1 /*
2 * This contains Q9's "built in" commands and CTCP handlers
3 */
4
5 #include "chanserv.h"
6 #include "../core/schedule.h"
7 #include "../lib/irc_string.h"
8
9 #include <string.h>
10
11 int cs_dorehash(void *source, int cargc, char **cargv) {
12 nick *sender=source;
13 Command *cmdlist[200];
14 int i,n;
15
16 /* Reload the response text first */
17 loadmessages();
18
19 /* Now the commands */
20 n=getcommandlist(cscommands, cmdlist, 200);
21
22 for(i=0;i<n;i++)
23 loadcommandsummary(cmdlist[i]);
24
25 chanservstdmessage(sender, QM_DONE);
26
27 return CMD_OK;
28 }
29
30 int cs_doquit(void *source, int cargc, char **cargv) {
31 char *reason="Leaving";
32 nick *sender=(nick *)source;
33
34 if (cargc>0) {
35 reason=cargv[0];
36 }
37
38 chanservstdmessage(sender, QM_DONE);
39
40 deregisterlocaluser(chanservnick, reason);
41 scheduleoneshot(time(NULL)+1,&chanservreguser,NULL);
42
43 return CMD_OK;
44 }
45
46 int cs_dorename(void *source, int cargc, char **cargv) {
47 char newnick[NICKLEN+1];
48 nick *sender=source;
49
50 if (cargc<1) {
51 chanservstdmessage(sender, QM_NOTENOUGHPARAMS, "rename");
52 return CMD_ERROR;
53 }
54
55 strncpy(newnick,cargv[0],NICKLEN);
56 newnick[NICKLEN]='\0';
57
58 renamelocaluser(chanservnick, newnick);
59 chanservstdmessage(sender, QM_DONE);
60
61 return CMD_OK;
62 }
63
64 int cs_doshowcommands(void *source, int cargc, char **cargv) {
65 nick *sender=source;
66 reguser *rup;
67 Command *cmdlist[200];
68 int i,n;
69 int lang;
70 char *message;
71 cmdsummary *summary;
72
73 n=getcommandlist(cscommands, cmdlist, 200);
74 rup=getreguserfromnick(sender);
75
76 if (!rup)
77 lang=0;
78 else
79 lang=rup->languageid;
80
81 chanservstdmessage(sender, QM_COMMANDLIST);
82
83 for (i=0;i<n;i++) {
84 if (cargc>0 && !match2strings(cargv[0],cmdlist[i]->command->content))
85 continue;
86
87 /* Don't list aliases */
88 if (cmdlist[i]->level & QCMD_ALIAS)
89 continue;
90
91 /* Check that this user can use this command.. */
92 if ((cmdlist[i]->level & QCMD_AUTHED) && !rup)
93 continue;
94
95 if ((cmdlist[i]->level & QCMD_NOTAUTHED) && rup)
96 continue;
97
98 if ((cmdlist[i]->level & QCMD_HELPER) &&
99 (!rup || !UHasHelperPriv(rup)))
100 continue;
101
102 if ((cmdlist[i]->level & QCMD_OPER) &&
103 (!rup || !UHasOperPriv(rup) || !IsOper(sender)))
104 continue;
105
106 if ((cmdlist[i]->level & QCMD_ADMIN) &&
107 (!rup || !UHasAdminPriv(rup) || !IsOper(sender)))
108 continue;
109
110 if ((cmdlist[i]->level & QCMD_DEV) &&
111 (!rup || !UIsDev(rup) || !IsOper(sender)))
112 continue;
113
114 summary=(cmdsummary *)cmdlist[i]->ext;
115
116 if (summary->bylang[lang]) {
117 message=summary->bylang[lang]->content;
118 } else if (summary->bylang[0]) {
119 message=summary->bylang[0]->content;
120 } else {
121 message=summary->def->content;
122 }
123
124 chanservsendmessage(sender, "%-20s %s",cmdlist[i]->command->content, message);
125 }
126
127 chanservstdmessage(sender, QM_ENDOFLIST);
128
129 return CMD_OK;
130 }
131
132 int cs_dohelp(void *source, int cargc, char **cargv) {
133 nick *sender=source;
134 Command *cmd;
135
136 if (cargc==0)
137 return cs_doshowcommands(source,cargc,cargv);
138
139 if (!(cmd=findcommandintree(cscommands, cargv[0], 1))) {
140 chanservstdmessage(sender, QM_UNKNOWNCMD, cargv[0]);
141 return CMD_ERROR;
142 }
143
144 csdb_dohelp(sender, cmd);
145
146 return CMD_OK;
147 }
148
149
150 int cs_doctcpping(void *source, int cargc, char **cargv) {
151 char *nullbuf="\001";
152
153 sendnoticetouser(chanservnick, source, "%cPING %s",
154 1, cargc?cargv[0]:nullbuf);
155
156 return CMD_OK;
157 }
158
159 int cs_doctcpversion(void *source, int cargc, char **cargv) {
160 sendnoticetouser(chanservnick, source, "\01VERSION Q9 version 0.75. (C) 2002-3 David Mansell (splidge)\01");
161 sendnoticetouser(chanservnick, source, "\01VERSION Built on newserv version 1.00. (C) 2002-3 David Mansell (splidge)\01");
162
163 return CMD_OK;
164 }
165
166 int cs_doctcpgender(void *source, int cargc, char **cargv) {
167 sendnoticetouser(chanservnick, source, "\1GENDER Anyone who has a bitch mode has to be female ;)\1");
168
169 return CMD_OK;
170 }
171