added NeonBackup bot
[NeonServV5.git] / src / modules / global.mod / cmd_global_register.c
index 548860d65053f350ae753bba69bdc182d48d478a..81e018014b26bb4cdaef743a4cfd1bb52df7cdc4 100644 (file)
@@ -1,4 +1,4 @@
-/* cmd_global_register.c - NeonServ v5.3
+/* cmd_global_register.c - NeonServ v5.4
  * Copyright (C) 2011-2012  Philipp Kreil (pk910)
  * 
  * This program is free software: you can redistribute it and/or modify
@@ -108,13 +108,13 @@ CMD_BIND(global_cmd_register) {
             cache->channel = strdup(channel);
             cache->multibot = multibot;
             cache->botname = (botname ? strdup(botname) : NULL);
-            lookup_authname(argv[1], global_cmd_register_auth_lookup, cache);
+            lookup_authname(argv[1], module_id, global_cmd_register_auth_lookup, cache);
         }
     } else {
         struct UserNode *cuser = getUserByNick(argv[1]);
         if(!cuser) {
             cuser = createTempUser(argv[1]);
-                       if(!cuser) {
+            if(!cuser) {
                 reply(getTextBot(), user, "NS_USER_UNKNOWN", argv[1]);
                 return;
             }
@@ -137,7 +137,7 @@ CMD_BIND(global_cmd_register) {
             cache->channel = strdup(channel);
             cache->multibot = multibot;
             cache->botname = (botname ? strdup(botname) : NULL);
-            get_userauth(cuser, global_cmd_register_nick_lookup, cache);
+            get_userauth(cuser, module_id, global_cmd_register_nick_lookup, cache);
         }
     }
 }
@@ -262,5 +262,52 @@ static void global_cmd_register_async1(struct ClientSocket *client, struct Clien
         reply(textclient, user, "NS_REGISTER_DONE", channel, auth);
     } else
         reply(textclient, user, "NS_REGISTER_DONE_NOAUTH", channel);
+    // NeonBackup SubBlock
+    if(client->botid == NEONSERV_BOTID) {
+        char setting[128];
+        sprintf(setting, "modules.%s.auto_backup_register", get_module_name(module_id));
+        if(get_int_field(setting))
+            module_global_cmd_register_neonbackup(channel);
+    }
     logEvent(event);
 }
+
+void global_cmd_register_neonbackup(char *channel) {
+    MYSQL_RES *res;
+    MYSQL_ROW row, row2;
+    printf_mysql_query("SELECT `botid` FROM `bot_channels` LEFT JOIN `bots` ON `bot_channels`.`botid` = `bots`.`id` LEFT JOIN `channels` ON `bot_channels`.`chanid` = `channels`.`channel_id` WHERE `channel_name` = '%s' AND botclass = '%d'", escape_string(channel), NEONBACKUP_BOTID);
+    res = mysql_use();
+    if ((row = mysql_fetch_row(res)) != NULL)
+        return;
+    int chanid;
+    printf_mysql_query("SELECT `channel_id` FROM `channels` WHERE `channel_name` = '%s'", escape_string(channel));
+    res = mysql_use();
+    if ((row = mysql_fetch_row(res)) != NULL) {
+        chanid = atoi(row[0]);
+    } else
+        return;
+    printf_mysql_query("SELECT `id`, `max_channels`, `defaulttrigger`, `nick` FROM `bots` WHERE `botclass` = '%d' AND `active` = '1' ORDER BY `register_priority` DESC", NEONBACKUP_BOTID);
+    res = mysql_use();
+    int botid = 0;
+    while ((row = mysql_fetch_row(res)) != NULL) {
+        //check channel count
+        printf_mysql_query("SELECT COUNT(*) FROM `bot_channels` WHERE `botid` = '%s'", row[0]);
+        row2 = mysql_fetch_row(mysql_use());
+        if(atoi(row2[0]) < atoi(row[1])) {
+            botid = atoi(row[0]);
+            break;
+        }
+    }
+    if(!botid)
+        return;
+    struct ClientSocket *bot;
+    for(bot = getBots(SOCKET_FLAG_READY, NULL); bot; bot = getBots(SOCKET_FLAG_READY, bot)) {
+        if(bot->clientid == botid)
+            break;
+    }
+    if(bot) {
+        putsock(bot, "JOIN %s", channel);
+    }
+    printf_mysql_query("INSERT INTO `bot_channels` (`botid`, `chanid`, `trigger`) VALUES ('%d', '%d', NULL)", botid, chanid);
+}
+