From: pk910 Date: Tue, 8 Nov 2011 14:26:29 +0000 (+0100) Subject: use optional third parameter as bot nick (defines the bot, the channel gets registere... X-Git-Tag: v5.3~192 X-Git-Url: http://git.pk910.de/?p=NeonServV5.git;a=commitdiff_plain;h=085e2a8525041163f59e0f4be823fdf8f6ba547f use optional third parameter as bot nick (defines the bot, the channel gets registered with) on cmd_register --- diff --git a/src/cmd_global_register.c b/src/cmd_global_register.c index 61d3e90..ab467d9 100644 --- a/src/cmd_global_register.c +++ b/src/cmd_global_register.c @@ -19,11 +19,12 @@ /* * argv[0] - channel -* argv[0/1] - nick / *auth +* argv[1] - nick / *auth +* argv[2] - (optional) bot nick */ static AUTHLOOKUP_CALLBACK(global_cmd_register_auth_lookup); static USERAUTH_CALLBACK(global_cmd_register_nick_lookup); -static void global_cmd_register_async1(struct ClientSocket *client, struct ClientSocket *textclient, struct UserNode *user, struct ChanNode *chan, struct Event *event, char *channel, char *auth, int multibot); +static void global_cmd_register_async1(struct ClientSocket *client, struct ClientSocket *textclient, struct UserNode *user, struct ChanNode *chan, struct Event *event, char *channel, char *auth, int multibot, char *botname); struct global_cmd_register_cache { struct ClientSocket *client, *textclient; @@ -32,6 +33,7 @@ struct global_cmd_register_cache { struct Event *event; char *nick; char *channel; + char *botname; int multibot; }; @@ -39,6 +41,7 @@ CMD_BIND(global_cmd_register) { MYSQL_RES *res; MYSQL_ROW row; char *channel = argv[0]; + char *botname = (argc > 2 ? argv[2] : NULL); int multibot = 0; if(!is_valid_chan(channel)) { reply(getTextBot(), user, "NS_INVALID_CHANNEL_NAME", argv[0]); @@ -74,7 +77,7 @@ 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); + global_cmd_register_async1(client, getTextBot(), user, chan, event, channel, NULL, multibot, botname); return; } else if(argc < 2) { reply(getTextBot(), user, "MODCMD_LESS_PARAM_COUNT"); @@ -87,7 +90,7 @@ 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); + global_cmd_register_async1(client, getTextBot(), 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 @@ -104,6 +107,7 @@ CMD_BIND(global_cmd_register) { cache->nick = strdup(argv[1]); cache->channel = strdup(channel); cache->multibot = multibot; + cache->botname = (botname ? strdup(botname) : NULL); lookup_authname(argv[1], global_cmd_register_auth_lookup, cache); } } else { @@ -113,7 +117,7 @@ CMD_BIND(global_cmd_register) { cuser->flags |= USERFLAG_ISTMPUSER; } if(cuser->flags & USERFLAG_ISAUTHED) { - global_cmd_register_async1(client, getTextBot(), user, chan, event, channel, cuser->auth, multibot); + global_cmd_register_async1(client, getTextBot(), user, chan, event, channel, cuser->auth, multibot, botname); } else { struct global_cmd_register_cache *cache = malloc(sizeof(*cache)); if (!cache) { @@ -128,6 +132,7 @@ CMD_BIND(global_cmd_register) { cache->nick = strdup(argv[1]); cache->channel = strdup(channel); cache->multibot = multibot; + cache->botname = (botname ? strdup(botname) : NULL); get_userauth(cuser, global_cmd_register_nick_lookup, cache); } } @@ -139,7 +144,9 @@ static AUTHLOOKUP_CALLBACK(global_cmd_register_auth_lookup) { //AUTH_DOES_NOT_EXIST reply(cache->textclient, cache->user, "NS_AUTH_UNKNOWN", cache->nick); } else - global_cmd_register_async1(cache->client, cache->textclient, cache->user, cache->chan, cache->event, cache->channel, auth, cache->multibot); + global_cmd_register_async1(cache->client, cache->textclient, cache->user, cache->chan, cache->event, cache->channel, auth, cache->multibot, cache->botname); + if(cache->botname) + free(cache->botname); free(cache->channel); free(cache->nick); free(cache); @@ -156,13 +163,15 @@ static USERAUTH_CALLBACK(global_cmd_register_nick_lookup) { reply(cache->textclient, cache->user, "NS_USER_NEED_AUTH", cache->nick); } else - global_cmd_register_async1(cache->client, cache->textclient, cache->user, cache->chan, cache->event, cache->channel, user->auth, cache->multibot); + global_cmd_register_async1(cache->client, cache->textclient, cache->user, cache->chan, cache->event, cache->channel, user->auth, cache->multibot, cache->botname); + if(cache->botname) + free(cache->botname); free(cache->channel); free(cache->nick); free(cache); } -static void global_cmd_register_async1(struct ClientSocket *client, struct ClientSocket *textclient, struct UserNode *user, struct ChanNode *chan, struct Event *event, char *channel, char *auth, int multibot) { +static void global_cmd_register_async1(struct ClientSocket *client, struct ClientSocket *textclient, struct UserNode *user, struct ChanNode *chan, struct Event *event, char *channel, char *auth, int multibot, char *botname) { //we've got a valid auth now... MYSQL_RES *res; MYSQL_ROW row, row2; @@ -200,7 +209,7 @@ static void global_cmd_register_async1(struct ClientSocket *client, struct Clien userid = (int) mysql_insert_id(mysql_conn); } } - printf_mysql_query("SELECT `id`, `max_channels`, `defaulttrigger` FROM `bots` WHERE `botclass` = '%d' ORDER BY `register_priority` DESC", client->botid); + printf_mysql_query("SELECT `id`, `max_channels`, `defaulttrigger`, `nick` FROM `bots` WHERE `botclass` = '%d' ORDER BY `register_priority` DESC", client->botid); res = mysql_use(); int botid = 0; char *bottrigger; @@ -208,7 +217,7 @@ static void global_cmd_register_async1(struct ClientSocket *client, struct Clien //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])) { + if(atoi(row2[0]) < atoi(row[1]) && (!botname || !stricmp(botname, row[3]))) { botid = atoi(row[0]); bottrigger = row[2]; break;