/* * CHANINFO is used by servers to inform each other about a channel: its * modes, channel key, user limits and its topic. The parameter combination * <key> and <limit> is optional, as well as the <topic> parameter, so that * there are three possible forms of this command: * * CHANINFO <chan> +<modes> * CHANINFO <chan> +<modes> :<topic> * CHANINFO <chan> +<modes> <key> <limit> :<topic> * * The parameter <key> must be ignored if a channel has no key (the parameter * <modes> doesn't list the "k" channel mode). In this case <key> should * contain "*" because the parameter <key> is required by the CHANINFO syntax * and therefore can't be omitted. The parameter <limit> must be ignored when * a channel has no user limit (the parameter <modes> doesn't list the "l" * channel mode). In this case <limit> should be "0". */ void Run(MessageSource &source, const std::vector<Anope::string> ¶ms) override { bool created; Channel *c = Channel::FindOrCreate(params[0], created); Anope::string modes = params[1]; if (params.size() == 3) { c->ChangeTopicInternal(NULL, source.GetName(), params[2], Anope::CurTime); } else if (params.size() == 5) { for (size_t i = 0, end = params[1].length(); i < end; ++i) { switch(params[1][i]) { case 'k': modes += " " + params[2]; continue; case 'l': modes += " " + params[3]; continue; } } c->ChangeTopicInternal(NULL, source.GetName(), params[4], Anope::CurTime); } c->SetModesInternal(source, modes); }
// Received: :DukeP TOPIC #anope :test void Run(MessageSource &source, const std::vector<Anope::string> ¶ms) override { Channel *c = Channel::Find(params[0]); if (!c) { Log(LOG_DEBUG) << "TOPIC for non-existent channel " << params[0]; return; } c->ChangeTopicInternal(source.GetUser(), source.GetName(), params[1], Anope::CurTime); }
void User::KillInternal(const MessageSource &source, const Anope::string &reason) { if (this->quit) { Log(LOG_DEBUG) << "Duplicate quit for " << this->nick; return; } Log(this, "killed") << "was killed by " << source.GetName() << " (Reason: " << reason << ")"; this->Quit(reason); }
/* * NICK - NEW * Received: :dev.anope.de NICK DukeP_ 1 ~DukePyro ip-2-201-236-154.web.vodafone.de 1 + :DukePyrolator * Parameters: <nickname> <hopcount> <username> <host> <servertoken> <umode> :<realname> * source = server * params[0] = nick * params[1] = hopcount * params[2] = username/ident * params[3] = host * params[4] = servertoken * params[5] = modes * params[6] = info * * NICK - change * Received: :DukeP_ NICK :test2 * source = oldnick * params[0] = newnick * */ void Run(MessageSource &source, const std::vector<Anope::string> ¶ms) override { if (params.size() == 1) { // we have a nickchange source.GetUser()->ChangeNick(params[0]); } else if (params.size() == 7) { // a new user is connecting to the network Server *s = Server::Find(params[4]); if (s == NULL) { Log(LOG_DEBUG) << "User " << params[0] << " introduced from non-existent server " << params[4] << "?"; return; } User::OnIntroduce(params[0], params[2], params[3], "", "", s, params[6], Anope::CurTime, params[5], "", NULL); Log(LOG_DEBUG) << "Registered nick \"" << params[0] << "\" on server " << s->GetName() << "."; } else { Log(LOG_DEBUG) << "Received NICK with invalid number of parameters. source = " << source.GetName() << "params[0] = " << params[0] << "params.size() = " << params.size(); } }
void User::Kill(const MessageSource &source, const Anope::string &reason) { Anope::string real_reason = source.GetName() + " (" + reason + ")"; IRCD->SendSVSKill(source, this, "%s", real_reason.c_str()); }