e869f83b083e62a8adf0654a6218e7954a390430
[NeonServV5.git] / src / cmd_neonserv_recover.c
1 /* cmd_neonserv_recover.c - NeonServ v5.1
2  * Copyright (C) 2011  Philipp Kreil (pk910)
3  * 
4  * This program is free software: you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation, either version 3 of the License, or
7  * (at your option) any later version.
8  * 
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  * 
14  * You should have received a copy of the GNU General Public License 
15  * along with this program. If not, see <http://www.gnu.org/licenses/>. 
16  */
17
18 #include "cmd_neonserv.h"
19
20 /*
21 * argv[0] - channel
22 */
23 CMD_BIND(neonserv_cmd_recover) {
24     MYSQL_RES *res;
25     MYSQL_ROW row, row2;
26     char *channel = argv[0];
27     if(!is_valid_chan(channel)) {
28         reply(getTextBot(), user, "NS_INVALID_CHANNEL_NAME", argv[0]);
29         return;
30     }
31     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);
32     res = mysql_use();
33     if ((row = mysql_fetch_row(res)) != NULL) {
34         reply(getTextBot(), user, "NS_REGISTER_ALREADY", argv[0], client->user->nick);
35         return;
36     }
37     int chanid;
38     printf_mysql_query("SELECT `channel_id` FROM `channels` WHERE `channel_name` = '%s'", escape_string(channel));
39     res = mysql_use();
40     if ((row = mysql_fetch_row(res)) != NULL) {
41         chanid = atoi(row[0]);
42     } else {
43         reply(getTextBot(), user, "NS_UNREGISTER_NOT_REGISTERED", argv[0], client->user->nick);
44         return;
45     }
46     printf_mysql_query("SELECT `id`, `max_channels`, `defaulttrigger` FROM `bots` WHERE `botclass` = '%d' ORDER BY `register_priority` DESC", client->botid);
47     res = mysql_use();
48     int botid = 0;
49     char *bottrigger;
50     while ((row = mysql_fetch_row(res)) != NULL) {
51         //check channel count
52         printf_mysql_query("SELECT COUNT(*) FROM `bot_channels` WHERE `botid` = '%s'", row[0]);
53         row2 = mysql_fetch_row(mysql_use());
54         if(atoi(row2[0]) < atoi(row[1])) {
55             botid = atoi(row[0]);
56             bottrigger = row[2];
57             break;
58         }
59     }
60     if(!botid) {
61         reply(getTextBot(), user, "NS_REGISTER_FULL");
62         return;
63     }
64     struct ClientSocket *bot;
65     for(bot = getBots(SOCKET_FLAG_READY, NULL); bot; bot = getBots(SOCKET_FLAG_READY, bot)) {
66         if(bot->clientid == botid)
67             break;
68     }
69     if(bot) {
70         putsock(bot, "JOIN %s", channel);
71     } else
72         reply(getTextBot(), user, "NS_REGISTER_DISCONNECTED");
73     printf_mysql_query("INSERT INTO `bot_channels` (`botid`, `chanid`, `trigger`) VALUES ('%d', '%d', '%s')", botid, chanid, bottrigger);
74     reply(getTextBot(), user, "NS_RECOVER_DONE", channel);
75     logEvent(event);
76 }