added NeonBackup bot
[NeonServV5.git] / src / modules / NeonServ.mod / cmd_neonserv_set.c
index 2ebb96828dac0eac072e9b28359b17967d30d422..2243c0df38e0401d0122ccfb149c638016a62b66 100644 (file)
@@ -23,6 +23,7 @@ static char* neonserv_cmd_set_trigger(struct ClientSocket *client, struct UserNo
 static char* neonserv_cmd_set_modes(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, struct Event *event, const char *setting, char *argument);
 static char* neonserv_cmd_set_dynlimit(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, struct Event *event, const char *setting, char *argument);
 static char* neonserv_cmd_set_nodelete(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, struct Event *event, const char *setting, char *argument);
+static char* neonserv_cmd_set_backupbot(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, struct Event *event, const char *setting, char *argument);
 
 #define NS_VALID_FUNCTION 0x01
 #define NS_VALID_STRING   0x02
@@ -80,6 +81,7 @@ static const struct {
     {"TOYS",            "channel_toys",         NS_VALID_OPTIONS | NS_HAS_OPT,      "3"},
     {"DYNLIMIT",        "channel_dynlimit",     NS_VALID_NUMERIC | NS_VALID_FUNCTION | NS_HAS_OPT, neonserv_cmd_set_dynlimit},
     {"NODELETE",        "channel_nodelete",     NS_VALID_BOOLEAN | NS_VALID_FUNCTION, neonserv_cmd_set_nodelete},
+    {"BACKUPBOT",       NULL,                   NS_VALID_BOOLEAN | NS_VALID_FUNCTION, neonserv_cmd_set_backupbot},
     {NULL, NULL, 0, NULL}
 };
 
@@ -132,6 +134,14 @@ CMD_BIND(neonserv_cmd_set) {
         while(channel_settings[i].setting) {
             if(!stricmp(channel_settings[i].setting, argv[0]) && (!(channel_settings[i].valid & NS_VALID_IF_HALFOP) || with_halfops)) {
                 //setting found
+                if(!stricmp(channel_settings[i].setting, "BACKUPBOT")) {
+                    char setting[128];
+                    sprintf(setting, "modules.%s.channel_backup_setting", get_module_name(module_id));
+                    if(!get_int_field(setting)) {
+                        i++;
+                        continue;
+                    }
+                }
                 if(channel_settings[i].valid & NS_VALID_FUNCTION) {
                     neonserv_cmd_set_function *func = channel_settings[i].parameter;
                     func(client, user, chan, event, channel_settings[i].setting, args);
@@ -155,6 +165,7 @@ CMD_BIND(neonserv_cmd_set) {
         struct Table *table;
         char *content[2];
         int with_halfops = get_int_field("General.have_halfop");
+        int channel_backup_setting;
         i = 0;
         j = 0;
         while(channel_settings[i].setting) {
@@ -163,6 +174,16 @@ CMD_BIND(neonserv_cmd_set) {
                 i++;
                 continue;
             }
+            if(!stricmp(channel_settings[i].setting, "BACKUPBOT")) {
+                char setting[128];
+                sprintf(setting, "modules.%s.channel_backup_setting", get_module_name(module_id));
+                channel_backup_setting = get_int_field(setting);
+                if(!channel_backup_setting) {
+                    i++;
+                    j++;
+                    continue;
+                }
+            }
             if(channel_settings[i].chanfield)
                 querypos += sprintf(query + querypos, ", `%s`", channel_settings[i].chanfield);
             i++;
@@ -183,6 +204,10 @@ CMD_BIND(neonserv_cmd_set) {
                 i++;
                 continue;
             }
+            if(!stricmp(channel_settings[i].setting, "BACKUPBOT") && !channel_backup_setting) {
+                i++;
+                continue;
+            }
             if(channel_settings[i].chanfield) {
                 j++;
                 org_value = (row[j] ? row[j] : defaults[j]);
@@ -468,4 +493,38 @@ static char* neonserv_cmd_set_nodelete(struct ClientSocket *client, struct UserN
     return value;
 }
 
+static char* neonserv_cmd_set_backupbot(struct ClientSocket *client, struct UserNode *user, struct ChanNode *chan, struct Event *event, const char *setting, char *argument) {
+    int backupbot;
+    //get current trigger
+    MYSQL_RES *res;
+    printf_mysql_query("SELECT `botid` FROM `bot_channels` LEFT JOIN `bots` ON `botid` = `bots`.`id` WHERE `chanid` = '%d' AND `botclass` = '%d'", chan->channel_id, NEONBACKUP_BOTID);
+    res = mysql_use();
+    if(mysql_fetch_row(res))
+        backupbot = 1;
+    else 
+        backupbot = 0;
+    if(argument) {
+        //change the channel setting
+        if(!strcmp(argument, "0") || !strcmp(argument, "off") || !strcmp(argument, get_language_string(user, "NS_SET_OFF"))) {
+            if(backupbot) {
+                module_global_cmd_unregister_neonbackup(chan->name);
+                backupbot = 0;
+            }
+        } else if(!strcmp(argument, "1") || !strcmp(argument, "on") || !strcmp(argument, get_language_string(user, "NS_SET_ON"))) {
+            if(!backupbot) {
+                module_global_cmd_register_neonbackup(chan->name);
+                backupbot = 1;
+            }
+        } else {
+            reply(getTextBot(), user, "NS_SET_INVALID_BOOLEAN", argument);
+            return NULL;
+        }
+        logEvent(event);
+    }
+    if(setting) {
+        reply(getTextBot(), user, "\002%s\002 %s", setting, (backupbot ? "1" : "0"));
+    }
+    return (backupbot ? "1" : "0");
+}
+
 #undef MAX_QUERY_LEN