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