X-Git-Url: http://git.pk910.de/?a=blobdiff_plain;f=src%2Fmodules%2Fglobal.mod%2Fcmd_global_register.c;h=03fa9323f4294f3183a07e4707eea3ceacb7fe58;hb=ee39770362f69ced5b52104b622582e882af0b77;hp=d6ec183bcddb64d7488de60e0904e034f6a24af7;hpb=902ebfe5551be2daa3edf8141bcee91f62c0a5e0;p=NeonServV5.git diff --git a/src/modules/global.mod/cmd_global_register.c b/src/modules/global.mod/cmd_global_register.c index d6ec183..03fa932 100644 --- a/src/modules/global.mod/cmd_global_register.c +++ b/src/modules/global.mod/cmd_global_register.c @@ -1,4 +1,4 @@ -/* cmd_global_register.c - NeonServ v5.3 +/* cmd_global_register.c - NeonServ v5.6 * Copyright (C) 2011-2012 Philipp Kreil (pk910) * * This program is free software: you can redistribute it and/or modify @@ -44,14 +44,14 @@ CMD_BIND(global_cmd_register) { char *botname = (argc > 2 ? argv[2] : NULL); int multibot = 0; if(!is_valid_chan(channel)) { - reply(getTextBot(), user, "NS_INVALID_CHANNEL_NAME", argv[0]); + reply(textclient, user, "NS_INVALID_CHANNEL_NAME", argv[0]); return; } printf_mysql_query("SELECT `botid`, `botclass` 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'", escape_string(channel)); res = mysql_use(); while ((row = mysql_fetch_row(res)) != NULL) { if(atoi(row[1]) == client->botid && (client->botid || client->clientid == atoi(row[0]))) { - reply(getTextBot(), user, "NS_REGISTER_ALREADY", argv[0], client->user->nick); + reply(textclient, user, "NS_REGISTER_ALREADY", argv[0], client->user->nick); return; } else multibot = 1; @@ -65,11 +65,11 @@ CMD_BIND(global_cmd_register) { printf_mysql_query("DELETE FROM `donotregister` WHERE `dnr_id` = '%s'", row[3]); } else { char expireBuf[MAXLEN]; - reply(getTextBot(), user, "NS_DNR_SET_EXPIRES", channel, row[0], timeToStr(user, (expire_time - time(0)), 2, expireBuf), row[2]); + reply(textclient, user, "NS_DNR_SET_EXPIRES", channel, row[0], timeToStr(user, (expire_time - time(0)), 2, expireBuf), row[2]); return; } } else { - reply(getTextBot(), user, "NS_DNR_SET", channel, row[0], row[2]); + reply(textclient, user, "NS_DNR_SET", channel, row[0], row[2]); return; } } @@ -77,10 +77,10 @@ CMD_BIND(global_cmd_register) { if(multibot && argc < 2) { //skip all these owner check lines multibot = 2; - global_cmd_register_async1(client, getTextBot(), user, chan, event, channel, NULL, multibot, botname); + global_cmd_register_async1(client, textclient, user, chan, event, channel, NULL, multibot, botname); return; } else if(argc < 2) { - global_cmd_register_async1(client, getTextBot(), user, chan, event, channel, user->auth, multibot, botname); + global_cmd_register_async1(client, textclient, user, chan, event, channel, user->auth, multibot, botname); return; } //check own access @@ -90,17 +90,17 @@ CMD_BIND(global_cmd_register) { printf_mysql_query("SELECT `user_user` FROM `users` WHERE `user_user` = '%s'", escape_string(argv[1])); res = mysql_use(); if ((row = mysql_fetch_row(res)) != NULL) { - global_cmd_register_async1(client, getTextBot(), user, chan, event, channel, row[0], multibot, botname); + global_cmd_register_async1(client, textclient, user, chan, event, channel, row[0], multibot, botname); } else { //we need to create a new user... //but first lookup the auth to check if it really exists struct global_cmd_register_cache *cache = malloc(sizeof(*cache)); if (!cache) { - perror("malloc() failed"); + printf_log("global", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return; } cache->client = client; - cache->textclient = getTextBot(); + cache->textclient = textclient; cache->user = user; cache->chan = chan; cache->event = event; @@ -114,22 +114,22 @@ CMD_BIND(global_cmd_register) { struct UserNode *cuser = getUserByNick(argv[1]); if(!cuser) { cuser = createTempUser(argv[1]); - if(!cuser) { - reply(getTextBot(), user, "NS_USER_UNKNOWN", argv[1]); + if(!cuser) { + reply(textclient, user, "NS_USER_UNKNOWN", argv[1]); return; } cuser->flags |= USERFLAG_ISTMPUSER; } if(cuser->flags & USERFLAG_ISAUTHED) { - global_cmd_register_async1(client, getTextBot(), user, chan, event, channel, cuser->auth, multibot, botname); + global_cmd_register_async1(client, textclient, user, chan, event, channel, cuser->auth, multibot, botname); } else { struct global_cmd_register_cache *cache = malloc(sizeof(*cache)); if (!cache) { - perror("malloc() failed"); + printf_log("global", LOG_ERROR, "%s:%d malloc() failed", __FILE__, __LINE__); return; } cache->client = client; - cache->textclient = getTextBot(); + cache->textclient = textclient; cache->user = user; cache->chan = chan; cache->event = event; @@ -196,11 +196,11 @@ static void global_cmd_register_async1(struct ClientSocket *client, struct Clien printf_mysql_query("DELETE FROM `donotregister` WHERE `dnr_id` = '%s'", row[3]); } else { char expireBuf[MAXLEN]; - reply(getTextBot(), user, "NS_DNR_SET_EXPIRES", auth, row[0], timeToStr(user, (expire_time - time(0)), 2, expireBuf), row[2]); + reply(textclient, user, "NS_DNR_SET_EXPIRES", auth, row[0], timeToStr(user, (expire_time - time(0)), 2, expireBuf), row[2]); return; } } else { - reply(getTextBot(), user, "NS_DNR_SET", auth, row[0], row[2]); + reply(textclient, user, "NS_DNR_SET", auth, row[0], row[2]); return; } } @@ -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); +} +