diff options
author | Adam <Adam@anope.org> | 2011-07-14 02:31:12 -0400 |
---|---|---|
committer | Adam <Adam@anope.org> | 2011-07-14 02:31:12 -0400 |
commit | f858164deed48f2dcacd5ffc06a55398a54da7e8 (patch) | |
tree | 89c3cf36bd8e94942370135218d67d6d17ee222e /modules/core/cs_ban.cpp | |
parent | 924f6849fee4598a1a3a7f1a98d96b79e5ffd3b4 (diff) |
Rewrote how commands are handled within Anope.
This allows naming commands and having spaces within command names.
Diffstat (limited to 'modules/core/cs_ban.cpp')
-rw-r--r-- | modules/core/cs_ban.cpp | 48 |
1 files changed, 23 insertions, 25 deletions
diff --git a/modules/core/cs_ban.cpp b/modules/core/cs_ban.cpp index 53c91314d..599bab969 100644 --- a/modules/core/cs_ban.cpp +++ b/modules/core/cs_ban.cpp @@ -12,24 +12,30 @@ /*************************************************************************/ #include "module.h" -#include "chanserv.h" class CommandCSBan : public Command { public: - CommandCSBan(const Anope::string &cname) : Command("BAN", 2, 3) + CommandCSBan(Module *creator) : Command(creator, "chanserv/ban", 2, 3) { this->SetDesc(_("Bans a selected nick on a channel")); + this->SetSyntax(_("\037#channel\037 \037nick\037 [\037reason\037]")); } - CommandReturn Execute(CommandSource &source, const std::vector<Anope::string> ¶ms) + void Execute(CommandSource &source, const std::vector<Anope::string> ¶ms) { const Anope::string &chan = params[0]; const Anope::string &target = params[1]; const Anope::string &reason = params.size() > 2 ? params[2] : "Requested"; + ChannelInfo *ci = cs_findchan(params[0]); + if (ci == NULL) + { + source.Reply(CHAN_X_NOT_REGISTERED, params[0].c_str()); + return; + } + User *u = source.u; - ChannelInfo *ci = source.ci; Channel *c = ci->c; bool is_same = target.equals_ci(u->nick); User *u2 = is_same ? u : finduser(target); @@ -38,21 +44,21 @@ class CommandCSBan : public Command uint16 u_level = u_access ? u_access->level : 0, u2_level = u2_access ? u2_access->level : 0; if (!c) - source.Reply(_(CHAN_X_NOT_IN_USE), chan.c_str()); + source.Reply(CHAN_X_NOT_IN_USE, chan.c_str()); else if (!u2) - source.Reply(_(NICK_X_NOT_IN_USE), target.c_str()); + source.Reply(NICK_X_NOT_IN_USE, target.c_str()); else if (!is_same ? !check_access(u, ci, CA_BAN) : !check_access(u, ci, CA_BANME)) - source.Reply(_(ACCESS_DENIED)); + source.Reply(ACCESS_DENIED); else if (!is_same && ci->HasFlag(CI_PEACE) && u2_level >= u_level) - source.Reply(_(ACCESS_DENIED)); + source.Reply(ACCESS_DENIED); /* * Dont ban/kick the user on channels where he is excepted * to prevent services <-> server wars. */ else if (matches_list(ci->c, u2, CMODE_EXCEPT)) - source.Reply(_(CHAN_EXCEPTED), u2->nick.c_str(), ci->name.c_str()); + source.Reply(CHAN_EXCEPTED, u2->nick.c_str(), ci->name.c_str()); else if (u2->IsProtected()) - source.Reply(_(ACCESS_DENIED)); + source.Reply(ACCESS_DENIED); else { Anope::string mask; @@ -65,7 +71,7 @@ class CommandCSBan : public Command /* We still allow host banning while not allowing to kick */ if (!c->FindUser(u2)) - return MOD_CONT; + return; if (ci->HasFlag(CI_SIGNKICK) || (ci->HasFlag(CI_SIGNKICK_LEVEL) && !check_access(u, ci, CA_SIGNKICK))) c->Kick(ci->WhoSends(), u2, "%s (%s)", reason.c_str(), u->nick.c_str()); @@ -73,24 +79,19 @@ class CommandCSBan : public Command c->Kick(ci->WhoSends(), u2, "%s", reason.c_str()); } - return MOD_CONT; + return; } bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(_("Syntax: \002BAN \037#channel\037 \037nick\037 [\037reason\037]\002\n" - " \n" - "Bans a selected nick on a channel.\n" + this->SendSyntax(source); + source.Reply(" "); + source.Reply(_("Bans a selected nick on a channel.\n" " \n" "By default, limited to AOPs or those with level 5 access \n" "and above on the channel.")); return true; } - - void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) - { - SyntaxError(source, "BAN", _("BAN \037#channel\037 \037nick\037 [\037reason\037]")); - } }; class CSBan : public Module @@ -98,14 +99,11 @@ class CSBan : public Module CommandCSBan commandcsban; public: - CSBan(const Anope::string &modname, const Anope::string &creator) : Module(modname, creator, CORE), commandcsban("BAN") + CSBan(const Anope::string &modname, const Anope::string &creator) : Module(modname, creator, CORE), commandcsban(this) { this->SetAuthor("Anope"); - if (!chanserv) - throw ModuleException("ChanServ is not loaded!"); - - this->AddCommand(chanserv->Bot(), &commandcsban); + ModuleManager::RegisterService(&commandcsban); } }; |