544112adfb6e3985dd14d84fbfae07348019232c
[NeonServV5.git] / cmd_neonserv_recover.c
1
2 /*
3 * argv[0] - channel
4 */
5 static CMD_BIND(neonserv_cmd_recover) {
6     MYSQL_RES *res;
7     MYSQL_ROW row, row2;
8     char *channel = argv[0];
9     if(!is_valid_chan(channel)) {
10         reply(getTextBot(), user, "NS_INVALID_CHANNEL_NAME", argv[0]);
11         return;
12     }
13     printf_mysql_query("SELECT `botid`, `bot_channels`.`id` FROM `bot_channels` LEFT JOIN `bots` ON `bot_channels`.`botid` = `bots`.`id` WHERE `chanid` = '%d' AND `botclass` = '%d'", chan->channel_id, client->botid);
14     res = mysql_use();
15     if ((row = mysql_fetch_row(res)) != NULL) {
16         reply(getTextBot(), user, "NS_REGISTER_ALREADY", argv[0], client->user->nick);
17         return;
18     }
19     int chanid;
20     printf_mysql_query("SELECT `channel_id` FROM `channels` WHERE `channel_name` = '%s'", escape_string(channel));
21     res = mysql_use();
22     if ((row = mysql_fetch_row(res)) != NULL) {
23         chanid = atoi(row[0]);
24     } else {
25         reply(getTextBot(), user, "NS_UNREGISTER_NOT_REGISTERED", argv[0], client->user->nick);
26         return;
27     }
28     printf_mysql_query("SELECT `id`, `max_channels`, `defaulttrigger` FROM `bots` WHERE `botclass` = '%d' ORDER BY `register_priority` DESC", client->botid);
29     res = mysql_use();
30     int botid = 0;
31     char *bottrigger;
32     while ((row = mysql_fetch_row(res)) != NULL) {
33         //check channel count
34         printf_mysql_query("SELECT COUNT(*) FROM `bot_channels` WHERE `botid` = '%s'", row[0]);
35         row2 = mysql_fetch_row(mysql_use());
36         if(atoi(row2[0]) < atoi(row[1])) {
37             botid = atoi(row[0]);
38             bottrigger = row[2];
39             break;
40         }
41     }
42     if(!botid) {
43         reply(getTextBot(), user, "NS_REGISTER_FULL");
44         return;
45     }
46     struct ClientSocket *bot;
47     for(bot = getBots(SOCKET_FLAG_READY, NULL); bot; bot = getBots(SOCKET_FLAG_READY, bot)) {
48         if(bot->clientid == botid)
49             break;
50     }
51     if(bot) {
52         putsock(bot, "JOIN %s", channel);
53     } else
54         reply(getTextBot(), user, "NS_REGISTER_DISCONNECTED");
55     printf_mysql_query("INSERT INTO `bot_channels` (`botid`, `chanid`, `trigger`) VALUES ('%d', '%d', '%s')", botid, chanid, bottrigger);
56     reply(getTextBot(), user, "NS_RECOVER_DONE", channel);
57     logEvent(event);
58 }