void Execute(IRCServer *server, User *u, const std::vector<std::string> ¶ms) { const std::string &channel = params[0]; const std::string &targnick = params[1]; std::string reason = params.size() > 2 ? params[2] : ""; Channel *c = server->FindChannel(channel); User *target = server->FindUser(targnick); if (c == NULL) u->WriteNumeric(403, channel + " :No such channel"); else if (target == NULL) u->WriteNumeric(401, targnick + " :No such nick/channel"); else if (!target->IsOnChannel(c)) u->WriteNumeric(441, target->GetNick() + " " + c->GetName() + " :They aren't on that channel"); else { user_status *status = c->FindUserStatus(u); if (status == NULL || !status->HasMode(CMODE_OP)) u->WriteNumeric(482, c->GetName() + " :You're not a channel operator"); else { if (reason.length() > IRCServer::kicklen) reason = reason.substr(0, IRCServer::kicklen); c->Send(u->GetMask(), "KICK " + c->GetName() + " " + target->GetNick() + " :" + reason); u->Part(c); c->Part(u); } } }
void WorldSession::HandleChannelLeave(WorldPacket& recvPacket) { CHECK_PACKET_SIZE(recvPacket, 1); string channelname; uint32 code = 0; Channel * chn; recvPacket >> code; recvPacket >> channelname; chn = channelmgr.GetChannel(channelname.c_str(), _player); if( chn != NULL ) chn->Part(_player, false); }
void WorldSession::HandleChannelLeave(WorldPacket& recvPacket) { CHECK_INWORLD_RETURN CHECK_PACKET_SIZE(recvPacket, 1); std::string channelname; uint32 code = 0; Channel* chn; recvPacket >> code; recvPacket >> channelname; chn = channelmgr.GetChannel(channelname.c_str(), _player); if (chn == NULL) return; chn->Part(_player); }