X-Git-Url: http://git.pk910.de/?p=NeonServV5.git;a=blobdiff_plain;f=src%2Fmodules%2FNeonHelp.mod%2Fbot_NeonHelp.c;h=12c357680e743877c8a4a35ad1812cc3ad85924d;hp=8b00188b8cb7282fdb527891a2192fd4b73b0f31;hb=b3e84a339e7a4c777209b0bbceaca40bb71a2594;hpb=8a990d2c87f8f8a6ca26dd2c6afef161dab2eb9e diff --git a/src/modules/NeonHelp.mod/bot_NeonHelp.c b/src/modules/NeonHelp.mod/bot_NeonHelp.c index 8b00188..12c3576 100644 --- a/src/modules/NeonHelp.mod/bot_NeonHelp.c +++ b/src/modules/NeonHelp.mod/bot_NeonHelp.c @@ -1,4 +1,4 @@ -/* bot_NeonHelp.c - NeonServ v5.3 +/* bot_NeonHelp.c - NeonServ v5.4 * Copyright (C) 2011-2012 Philipp Kreil (pk910) * * This program is free software: you can redistribute it and/or modify @@ -15,10 +15,11 @@ * along with this program. If not, see . */ #include "../module.h" +#include "../botid.h" #include "bot_NeonHelp.h" #include "../../modcmd.h" -#include "../../cmd_neonhelp.h" +#include "cmd_neonhelp.h" #include "../../lang.h" #include "../../mysqlConn.h" #include "../../ClientSocket.h" @@ -31,7 +32,7 @@ #include "../../DBHelper.h" #include "../../WHOHandler.h" -#define BOTID 4 +#define BOTID NEONHELP_BOTID #define BOTALIAS "NeonHelp" static const struct default_language_entry msgtab[] = { @@ -57,9 +58,13 @@ static const struct default_language_entry msgtab[] = { {"NH_REQUESTS_HEADER_STATUS", "State"}, {"NH_REQUESTS_HEADER_NICK", "Nick"}, {"NH_REQUESTS_HEADER_TIME", "Time"}, + {"NH_REQUESTS_HEADER_STATUS", "State"}, + {"NH_REQUESTS_HEADER_AUTH", "Auth"}, + {"NH_REQUESTS_HEADER_MASK", "Mask"}, {"NH_REQUESTS_HEADER_REQUEST", "Question"}, {"NH_REQUESTS_STATE_ACTIVE", "active"}, {"NH_REQUESTS_STATE_PENDING", "pending"}, + {"NH_REQUESTS_STATE_CLOSED", "closed"}, {"NH_REQUESTS_STATE_ERROR", "ERROR"}, {"NH_STATS_HEADER_USER", "User"}, {"NH_STATS_HEADER_LAST_24H", "last 24h"}, @@ -69,12 +74,17 @@ static const struct default_language_entry msgtab[] = { }; static void neonhelp_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]); } @@ -121,6 +131,7 @@ static void start_bots(int type) { 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_SILENT; + client->flags |= SOCKET_FLAG_REQUEST_INVITE | SOCKET_FLAG_REQUEST_OP; client->botid = BOTID; client->clientid = atoi(row[7]); connect_socket(client); @@ -175,7 +186,7 @@ static void neonhelp_event_privmsg(struct UserNode *user, struct UserNode *targe cache->user = user; cache->target = target; cache->message = strdup(message); - get_userauth(user, neonhelp_event_privmsg_nick_lookup, cache); + get_userauth(user, module_id, neonhelp_event_privmsg_nick_lookup, cache); } } @@ -266,7 +277,7 @@ static void neonhelp_event_privmsg_async(struct ClientSocket *client, struct Use if(!timeq_name_exists(nameBuf)) { int *cidptr = malloc(sizeof(int)); *cidptr = client->clientid; - timeq_add_name(nameBuf, 300, neonhelp_remind_open_requests, cidptr); + timeq_add_name(nameBuf, 300, module_id, neonhelp_remind_open_requests, cidptr); } } printf_mysql_query("INSERT INTO `helpserv_requests` (`botid`, `host`, `hand`, `nick`, `status`, `supporter`, `time`, `text`) VALUES ('%d', '%s@%s', '%s', '%s', '0', '-1', UNIX_TIMESTAMP(), '%s')", client->clientid, escape_string(user->ident), escape_string(user->host), ((user->flags & USERFLAG_ISAUTHED) ? escape_string(user->auth) : "*"), escape_string(user->nick), escape_string(message)); @@ -339,7 +350,7 @@ static TIMEQ_CALLBACK(neonhelp_remind_open_requests) { char nameBuf[30]; sprintf(nameBuf, "neonhelp_%d", client->clientid); if(!timeq_name_exists(nameBuf)) { - timeq_add_name(nameBuf, 300, neonhelp_remind_open_requests, data); + timeq_add_name(nameBuf, 300, module_id, neonhelp_remind_open_requests, data); } char replybuf[MAXLEN]; build_language_string(NULL, replybuf, (requests == 1 ? "NH_REMIND_OPEN_REQUESTS_1" : "NH_REMIND_OPEN_REQUESTS_2"), requests); @@ -511,21 +522,52 @@ static void neonhelp_event_quit(struct UserNode *target, char *reason) { } } +static void neonhelp_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_NeonHelp(int type) { set_bot_alias(BOTID, BOTALIAS); - start_bots(); + start_bots(type); if(type == MODSTATE_REBIND) return; //register events - bind_bot_ready(neonhelp_bot_ready); - bind_privmsg(neonhelp_event_privmsg); - bind_chanmsg(neonhelp_event_chanmsg); - bind_part(neonhelp_event_part); - bind_kick(neonhelp_event_kick); - bind_quit(neonhelp_event_quit); + bind_bot_ready(neonhelp_bot_ready, module_id); + bind_privmsg(neonhelp_event_privmsg, module_id); + bind_chanmsg(neonhelp_event_chanmsg, module_id); + bind_part(neonhelp_event_part, module_id); + bind_kick(neonhelp_event_kick, module_id); + bind_quit(neonhelp_event_quit, module_id); + bind_invite(neonhelp_event_invite, module_id); - set_trigger_callback(BOTID, neonhelp_trigger_callback); + set_trigger_callback(BOTID, module_id, neonhelp_trigger_callback); register_default_language_table(msgtab); }