2 #include "cmd_neonserv.h"
7 static int neonserv_cmd_command_chanaccess(struct cmd_binding *cbind, struct ChanNode *chan);
8 static int neonserv_cmd_command_operaccess(struct cmd_binding *cbind);
10 CMD_BIND(neonserv_cmd_command) {
14 struct cmd_binding *cbind = find_cmd_binding(client->botid, argv[0]);
16 reply(getTextBot(), user, "NS_UNBIND_NOT_FOUND", argv[0]);
20 reply(getTextBot(), user, "NS_COMMAND_BINDING", cbind->cmd, cbind->func->name, (cbind->parameters ? cbind->parameters : ""));
22 reply(getTextBot(), user, "NS_COMMAND_ACCESS", neonserv_cmd_command_chanaccess(cbind, chan), neonserv_cmd_command_operaccess(cbind));
23 printf_mysql_query("SELECT `user_lang` FROM `users` WHERE `user_user` = '%s'", escape_string(user->auth));
26 if ((row = mysql_fetch_row(res)) != NULL)
30 printf_mysql_query("SELECT `text` FROM `help` WHERE `lang` = '%s' AND `ident` = '%s'", escape_string(lang), escape_string(ident));
32 if ((row = mysql_fetch_row(res)) == NULL) {
33 if(stricmp(lang, "en")) {
34 printf_mysql_query("SELECT `text` FROM `help` WHERE `lang` = 'en' AND `ident` = '%s'", escape_string(ident));
37 if ((row = mysql_fetch_row(res)) == NULL) {
38 printf_mysql_query("SELECT `text` FROM `help` WHERE `lang` = '%s' AND `ident` = '%s'", escape_string(lang), escape_string(cbind->func->name));
40 if ((row = mysql_fetch_row(res)) == NULL) {
41 if(stricmp(lang, "en")) {
42 printf_mysql_query("SELECT `text` FROM `help` WHERE `lang` = 'en' AND `ident` = '%s'", escape_string(cbind->func->name));
45 if ((row = mysql_fetch_row(res)) == NULL) {
54 for(i = 0; i < strlen(row[0]); i++) {
58 sendBuf[sendBufPos] = '\0';
59 reply(getTextBot(), user, "%s", sendBuf);
66 sendBuf[sendBufPos++] = '\002';
70 sendBuf[sendBufPos++] = '\003';
74 sendBuf[sendBufPos++] = '\031';
79 sendBufPos += sprintf(sendBuf + sendBufPos, "%s", client->user->nick);
83 sendBuf[sendBufPos++] = '$';
88 sendBuf[sendBufPos++] = row[0][i];
93 sendBuf[sendBufPos] = '\0';
94 reply(getTextBot(), user, "%s", sendBuf);
99 static int neonserv_cmd_command_chanaccess(struct cmd_binding *cbind, struct ChanNode *chan) {
100 char access_list[256];
102 int access_count = 0;
104 char *str_a, *str_b = cbind->func->channel_access, *str_c;
105 if(cbind->flags & CMDFLAG_OVERRIDE_CHANNEL_ACCESS)
106 str_b = cbind->channel_access;
107 access_list[0] = '\0';
109 str_c = strdup(str_b);
111 while((str_a = str_b)) {
112 str_b = strstr(str_a, ",");
119 access_pos += sprintf(access_list+access_pos, (access_pos ? ", `%s`" : "`%s`"), str_a);
122 if(atoi(str_a) > minaccess)
123 minaccess = atoi(str_a);
130 MYSQL_ROW row, defaults = NULL;
131 printf_mysql_query("SELECT %s FROM `channels` WHERE `channel_name` = '%s'", access_list, escape_string(chan->name));
133 if ((row = mysql_fetch_row(res)) != NULL) {
135 for(i = 0; i < access_count; i++) {
136 if(!row[i] && !defaults) {
137 printf_mysql_query("SELECT %s FROM `channels` WHERE `channel_name` = 'defaults'", access_list);
138 defaults = mysql_fetch_row(mysql_use());
140 caccess = (row[i] ? atoi(row[i]) : atoi(defaults[i]));
141 if(caccess > minaccess)
149 static int neonserv_cmd_command_operaccess(struct cmd_binding *cbind) {
150 return ((cbind->flags & CMDFLAG_OVERRIDE_GLOBAL_ACCESS) ? cbind->global_access : cbind->func->global_access);