fixed last commit
authorpk910 <philipp@zoelle1.de>
Thu, 25 Aug 2011 10:24:59 +0000 (12:24 +0200)
committerpk910 <philipp@zoelle1.de>
Thu, 25 Aug 2011 12:38:04 +0000 (14:38 +0200)
DATABASE.txt
bot_NeonServ.c
cmd_neonserv_set.c
modcmd.c

index e07d1cc1d9879f9f2845f54d473e04a01fc72771..09ca9c4f647eda8aca72b28edac557bf9659153e 100644 (file)
@@ -26,7 +26,6 @@ INDEX ( `owner_history_cid` )
 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 
index e843bf56bf8fc7b8f4d62afe7df16f37207cbc6d..53d8bbe3ebbc51853bc21691f30bc056ebd5633e 100644 (file)
@@ -226,7 +226,7 @@ static void start_bots() {
         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])) {
@@ -237,7 +237,7 @@ static void start_bots() {
                     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]);
                 }
             }
         }
@@ -247,7 +247,7 @@ static void start_bots() {
 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);
@@ -273,6 +273,7 @@ void init_NeonServ() {
     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);
index 5ed7bbada3465f128cbf108dd6207b31b4793265..69e9c06550801f5366dcbc6a0a64028edbdbf351 100644 (file)
@@ -18,7 +18,7 @@ static const struct {
     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},
@@ -47,16 +47,33 @@ static const struct {
     {"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;
+}
+
index 33e628459ae4615b9fdf414a25d12934a273eed9..7c1b0c5ec9a0f7b38afe0c8583143249e81c2c6e 100644 (file)
--- a/modcmd.c
+++ b/modcmd.c
@@ -87,12 +87,12 @@ static char* get_channel_trigger(int botid, struct ChanNode *chan) {
     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);
 }
@@ -269,7 +269,8 @@ static void handle_command_async(struct ClientSocket *client, struct UserNode *u
         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 {
@@ -279,8 +280,13 @@ static void handle_command_async(struct ClientSocket *client, struct UserNode *u
                 *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) {