ALTER TABLE `chanusers` ADD INDEX ( `chanuser_cid` ) ;
ALTER TABLE `chanusers` ADD INDEX ( `chanuser_uid` ) ;
-ALTER TABLE `bot_binds` ADD `chan_access` VARCHAR( 256 ) NOT NULL AFTER `parameters`
+ALTER TABLE `bot_binds` ADD `chan_access` VARCHAR( 256 ) NULL DEFAULT NULL AFTER `parameters`
-ALTER TABLE `bot_binds` CHANGE `chan_access` `chan_access` VARCHAR( 256 ) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL ,
-CHANGE `global_access` `global_access` INT( 3 ) NULL
+ALTER TABLE `bot_binds` CHANGE `global_access` `global_access` INT( 3 ) NULL
client->botid = BOTID;
client->clientid = atoi(row[7]);
connect_socket(client);
- printf_mysql_query("SELECT `command`, `function`, `parameters`, `global_access`, `channel_access` FROM `bot_binds` WHERE `botid` = '%d'", client->clientid);
+ printf_mysql_query("SELECT `command`, `function`, `parameters`, `global_access`, `chan_access` FROM `bot_binds` WHERE `botid` = '%d'", client->clientid);
res2 = mysql_use();
while ((row = mysql_fetch_row(res2)) != NULL) {
if(bind_cmd_to_command(BOTID, row[0], row[1])) {
bind_set_global_access(BOTID, row[0], atoi(row[3]));
}
if(row[4]) {
- bind_set_global_access(BOTID, row[0], row[4]);
+ bind_set_channel_access(BOTID, row[0], row[4]);
}
}
}
void init_NeonServ() {
check_mysql();
- register_command(BOTID, "modes", neonserv_cmd_modes, 1, CMDFLAG_REQUIRE_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH);
+ register_command(BOTID, "modes", neonserv_cmd_modes, 1, CMDFLAG_REQUIRE_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH, NULL, 0);
register_command(BOTID, "adduser", neonserv_cmd_adduser, 2, CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH, "#channel_canadd", 0);
register_command(BOTID, "deluser", neonserv_cmd_deluser, 1, CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH, "#channel_candel", 0);
register_command(BOTID, "deopall", neonserv_cmd_deopall, 0, CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH, "#channel_canop", 0);
register_command(BOTID, "voiceall", neonserv_cmd_voiceall, 0, CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH, "#channel_canvoice", 0);
register_command(BOTID, "devoiceall", neonserv_cmd_devoiceall, 0, CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH, "#channel_canvoice", 0);
+ register_command(BOTID, "set", neonserv_cmd_set, 0, CMDFLAG_REQUIRE_CHAN | CMDFLAG_REGISTERED_CHAN | CMDFLAG_REQUIRE_AUTH | CMDFLAG_CHECK_AUTH, "#channel_setters", 0);
start_bots();
bind_bot_ready(neonserv_bot_ready);
const char *chanfield;
unsigned int valid;
void *parameter;
-} channel_settings[] {
+} channel_settings[] = {
{"trigger", "channel_trigger", NS_VALID_FUNCTION, neonserv_cmd_set_trigger},
{"defaulttopic", "channel_defaulttopic", NS_VALID_STRING, NULL},
{"topicmask", "channel_topicmask", NS_VALID_STRING, NULL},
{"resync", "channel_canresync", NS_VALID_ACCESS, NULL},
{"suspend", "channel_cansuspend", NS_VALID_ACCESS, NULL},
{"noticeusers", "channel_notice", NS_VALID_ACCESS, NULL},
- {"noticereaction", "channel_noticereaction", NS_VALID_OPTIONS, 4},
+ {"noticereaction", "channel_noticereaction", NS_VALID_OPTIONS, "4"},
{"ctcpusers", "channel_ctcp", NS_VALID_ACCESS, NULL},
- {"ctcpreaction", "channel_ctcpreaction", NS_VALID_OPTIONS, 4},
- {"protect", "channel_protect", NS_VALID_OPTIONS, 4},
- {"toys", "channel_toys", NS_VALID_OPTIONS, 3},
+ {"ctcpreaction", "channel_ctcpreaction", NS_VALID_OPTIONS, "4"},
+ {"protect", "channel_protect", NS_VALID_OPTIONS, "4"},
+ {"toys", "channel_toys", NS_VALID_OPTIONS, "3"},
{"dynlimit", "channel_dynlimit", NS_VALID_NUMERIC | NS_VALID_FUNCTION, neonserv_cmd_set_dynlimit},
{"nodelete", "channel_nodelete", NS_VALID_BOOLEAN | NS_VALID_FUNCTION, neonserv_cmd_set_nodelete},
{NULL, NULL, 0, NULL}
};
static CMD_BIND(neonserv_cmd_set) {
-
+ return;
}
+
+static int neonserv_cmd_set_trigger(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, char *argument) {
+ return 1;
+}
+
+static int neonserv_cmd_set_modes(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, char *argument) {
+ return 1;
+}
+
+static int neonserv_cmd_set_dynlimit(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, char *argument) {
+ return 1;
+}
+
+static int neonserv_cmd_set_nodelete(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, char *argument) {
+ return 1;
+}
+
return trigger->trigger;
}
-static void handle_command_async(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, struct ChanNode *sent_chan struct cmd_binding *cbind, char **argv, int argc);
+static void handle_command_async(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, struct ChanNode *sent_chan, struct cmd_binding *cbind, char **argv, int argc);
static USERAUTH_CALLBACK(command_checked_auth) {
struct command_check_user_cache *cache = data;
tmp_text_client = cache->textclient;
- handle_command_async(cache->client, user, cache->chan, cache->sent_chan, cache->cbind, cache->argv, cache->argc)
+ handle_command_async(cache->client, user, cache->chan, cache->sent_chan, cache->cbind, cache->argv, cache->argc);
free(cache->message);
free(cache);
}
if(str_b) {
while((str_a = strstr(str_b, ","))) {
*str_a = '\0';
- if(*str_b[0] == '#') {
+ if(*str_b == '#') {
+ str_b++;
access_pos += sprintf(access_list+access_pos, ", `%s`", str_b);
access_count++;
} else {
*str_a = ',';
str_b = str_a+1;
}
- access_pos += sprintf(access_list+access_pos, ", `%s`", str_b);
- access_count++;
+ if(*str_b == '#') {
+ str_b++;
+ access_pos += sprintf(access_list+access_pos, ", `%s`", str_b);
+ access_count++;
+ } else if(atoi(str_b) > minaccess)
+ minaccess = atoi(str_b);
+
} else
access_list[0] = '\0';
if(!(chan->flags & CHANFLAG_REQUESTED_CHANINFO) || (sent_chan && sent_chan == chan) || access_count || minaccess) {