X-Git-Url: http://git.pk910.de/?a=blobdiff_plain;f=src%2Fevent_neonserv_kick.c;h=f872638347f5146f672d6df9afcd89b239fae745;hb=44436a96352a38631237978c9fd431cef3d85cfb;hp=d1c7c1bae30c8610a75fd7161f9c00cc2c2dfc3d;hpb=9e8ba8c786ea7da3b024a090dab55a3503f11be1;p=NeonServV5.git diff --git a/src/event_neonserv_kick.c b/src/event_neonserv_kick.c index d1c7c1b..f872638 100644 --- a/src/event_neonserv_kick.c +++ b/src/event_neonserv_kick.c @@ -1,4 +1,4 @@ -/* event_neonserv_kick.c - NeonServ v5.0 +/* event_neonserv_kick.c - NeonServ v5.3 * Copyright (C) 2011 Philipp Kreil (pk910) * * This program is free software: you can redistribute it and/or modify @@ -28,7 +28,29 @@ static void neonserv_event_kick_async2(struct ClientSocket *client, struct UserN static void neonserv_event_kick(struct UserNode *user, struct ChanUser *target, char *reason) { struct ChanNode *chan = target->chan; - struct ClientSocket *client = getBotForChannel(chan); + struct ClientSocket *client; + if(isBot(target->user)) { + 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; + } + client = getBotForChannel(chan); if(!client) return; //we can't "see" this event if(isNetworkService(user)) return; loadChannelSettings(chan);