X-Git-Url: http://git.pk910.de/?a=blobdiff_plain;f=src%2Fmodules%2FNeonSpam.mod%2Fbot_NeonSpam.c;h=eace7b7071f1feb6d3c5901f650966aa674c4e87;hb=c99b8d5951fe6429844c8cb5ff94213bb625ad95;hp=10b4083e9010e81d811f879d41ba209f01437361;hpb=3e82313bfb3eaf4f2b59dfc165372e3174be838b;p=NeonServV5.git diff --git a/src/modules/NeonSpam.mod/bot_NeonSpam.c b/src/modules/NeonSpam.mod/bot_NeonSpam.c index 10b4083..eace7b7 100644 --- a/src/modules/NeonSpam.mod/bot_NeonSpam.c +++ b/src/modules/NeonSpam.mod/bot_NeonSpam.c @@ -1,4 +1,4 @@ -/* bot_NeonSpam.c - NeonServ v5.4 +/* bot_NeonSpam.c - NeonServ v5.5 * Copyright (C) 2011-2012 Philipp Kreil (pk910) * * This program is free software: you can redistribute it and/or modify @@ -103,38 +103,18 @@ static struct NeonSpamJoinNode *getNeonSpamJoinNode(struct ChanUser *chanuser); #include "event_neonspam_join.c" #include "event_neonspam_chanmsg.c" -static void neonspam_event_kick(struct UserNode *user, struct ChanUser *target, char *reason) { - struct ChanNode *chan = target->chan; - if(isBot(target->user)) { - struct ClientSocket *client = getChannelBot(chan, 0); - struct ClientSocket *bot = client; - for(client = getBots(SOCKET_FLAG_READY, NULL); client; client = getBots(SOCKET_FLAG_READY, client)) { - if(client->user == target->user) { - break; - } - } - if(!client) return; - if(bot && bot != client && (isModeSet(chan->modes, 'i') || isModeSet(chan->modes, 'a') || isModeSet(chan->modes, 'l'))) { - struct ChanUser *chanuser = getChanUser(bot->user, chan); - if(chanuser && chanuser->flags & CHANUSERFLAG_OPPED) - putsock(bot, "INVITE %s %s", target->user->nick, chan->name); - } - char *key = ""; - if(isModeSet(chan->modes, 'k')) { - key = getModeValue(chan->modes, 'k'); - } - putsock(client, "JOIN %s %s", chan->name, key); - return; - } -} - static void neonspam_bot_ready(struct ClientSocket *client) { + if(client->botid != BOTID) + return; MYSQL_RES *res; MYSQL_ROW row; - printf_mysql_query("SELECT `automodes` FROM `bots` WHERE `id` = '%d'", client->clientid); + printf_mysql_query("SELECT `automodes`, `oper_user`, `oper_pass` FROM `bots` WHERE `id` = '%d'", client->clientid); res = mysql_use(); if ((row = mysql_fetch_row(res)) != NULL) { + if(row[1] && row[2]) { + putsock(client, "OPER %s %s", row[1], row[2]); + } putsock(client, "MODE %s +%s", client->user->nick, row[0]); } @@ -180,6 +160,7 @@ static void start_bots(int type) { client->flags |= (strcmp(row[6], "0") ? SOCKET_FLAG_PREFERRED : 0); client->flags |= (strcmp(row[8], "0") ? SOCKET_FLAG_USE_QUEUE : 0); client->flags |= (strcmp(row[9], "0") ? SOCKET_FLAG_SSL : 0); + client->flags |= SOCKET_FLAG_REQUEST_INVITE | SOCKET_FLAG_REQUEST_OP; client->botid = BOTID; client->clientid = atoi(row[7]); connect_socket(client); @@ -251,7 +232,8 @@ int loadNeonSpamSettings(struct ChanNode *chan) { loadChannelSettings(chan); printf_mysql_query("SELECT `channel_scanner`, `channel_spam_limit`, `channel_spam_except`, `channel_flood_limit`, `channel_flood_time`, `channel_flood_except`, `channel_join_limit`, `channel_join_time`, `channel_join_except`, `channel_caps_percent`, `channel_caps_except`, `channel_digit_percent`, `channel_digit_except`, `channel_badword_except` FROM `channels` WHERE `channel_id` = '%d'", chan->channel_id); res = mysql_use(); - row = mysql_fetch_row(res); + if(!(row = mysql_fetch_row(res))) + return 0; if(!row[0] || !row[1] || !row[2] || !row[3] || !row[4] || !row[5] || !row[6] || !row[7] || !row[8] || !row[9] || !row[10] || !row[11] || !row[12]) { printf_mysql_query("SELECT `channel_scanner`, `channel_spam_limit`, `channel_spam_except`, `channel_flood_limit`, `channel_flood_time`, `channel_flood_except`, `channel_join_limit`, `channel_join_time`, `channel_join_except`, `channel_caps_percent`, `channel_caps_except`, `channel_digit_percent`, `channel_digit_except`, `channel_badword_except` FROM `channels` WHERE `channel_name` = 'defaults'"); res = mysql_use(); @@ -369,6 +351,36 @@ static int neonspam_event_freechan(struct ChanNode *chan) { return 1; } +static void neonspam_event_invite(struct ClientSocket *client, struct UserNode *user, char *channel) { + if(client->botid != BOTID) + return; + MYSQL_RES *res; + MYSQL_ROW row; + printf_mysql_query("SELECT `botid`, `bot_channels`.`id`, `suspended` FROM `bot_channels` LEFT JOIN `bots` ON `bot_channels`.`botid` = `bots`.`id` LEFT JOIN `channels` ON `chanid` = `channel_id` WHERE `channel_name` = '%s' AND `botclass` = '%d'", escape_string(channel), client->botid); + res = mysql_use(); + if ((row = mysql_fetch_row(res)) == NULL) { + reply(client, user, "NS_INVITE_FAIL", channel, client->user->nick); + return; + } + if(!strcmp(row[2], "1")) { + reply(client, user, "MODCMD_CHAN_SUSPENDED"); + return; + } + int botid = atoi(row[0]); + struct ClientSocket *bot; + for(bot = getBots(SOCKET_FLAG_READY, NULL); bot; bot = getBots(SOCKET_FLAG_READY, bot)) { + if(bot->clientid == botid) + break; + } + if(bot) { + struct ChanNode *chan = getChanByName(channel); + if(chan && isUserOnChan(bot->user, chan)) { + reply(client, user, "NS_INVITE_ON_CHAN", bot->user->nick, chan->name); + } else + putsock(bot, "JOIN %s", channel); + } +} + void init_NeonSpam(int type) { set_bot_alias(BOTID, BOTALIAS); @@ -381,18 +393,14 @@ void init_NeonSpam(int type) { bind_join(neonspam_event_join, module_id); bind_chanmsg(neonspam_event_chanmsg, module_id); bind_privctcp(general_event_privctcp, module_id); - bind_kick(neonspam_event_kick, module_id); bind_freechan(neonspam_event_freechan, module_id); - + bind_invite(neonspam_event_invite, module_id); + set_trigger_callback(BOTID, module_id, neonspam_trigger_callback); register_default_language_table(msgtab); } -void loop_NeonSpam() { - -} - void free_NeonSpam(int type) { unbind_allcmd(BOTID); if(type == MODSTATE_STARTSTOP) {