*/
CmdResult CommandKick::Handle (const std::vector<std::string>& parameters, User *user)
{
- std::string reason;
Channel* c = ServerInstance->FindChan(parameters[0]);
User* u;
}
}
- Membership* const memb = c->GetUser(u);
- if (!memb)
+ const UserMembIter victimiter = c->userlist.find(u);
+ if (victimiter == c->userlist.end())
{
user->WriteNumeric(ERR_USERNOTINCHANNEL, "%s %s :They are not on that channel", u->nick.c_str(), c->name.c_str());
return CMD_FAILURE;
}
+ Membership* const memb = victimiter->second;
- if (parameters.size() > 2)
- {
- reason.assign(parameters[2], 0, ServerInstance->Config->Limits.MaxKick);
- }
- else
- {
- reason.assign(user->nick, 0, ServerInstance->Config->Limits.MaxKick);
- }
+ const bool has_reason = (parameters.size() > 2);
+ const std::string reason((has_reason ? parameters.back() : user->nick), 0, ServerInstance->Config->Limits.MaxKick);
// Do the following checks only if the KICK is done by a local user;
// each server enforces its own rules.
}
}
- c->KickUser(user, u, reason, srcmemb);
+ c->KickUser(user, victimiter, reason);
return CMD_SUCCESS;
}