diff options
Diffstat (limited to 'modules/core/cs_saset.cpp')
-rw-r--r-- | modules/core/cs_saset.cpp | 125 |
1 files changed, 28 insertions, 97 deletions
diff --git a/modules/core/cs_saset.cpp b/modules/core/cs_saset.cpp index 21c1bf4d4..ba4df0c80 100644 --- a/modules/core/cs_saset.cpp +++ b/modules/core/cs_saset.cpp @@ -12,113 +12,46 @@ /*************************************************************************/ #include "module.h" -#include "chanserv.h" class CommandCSSASet : public Command { - typedef std::map<Anope::string, Command *, std::less<ci::string> > subcommand_map; - subcommand_map subcommands; - public: - CommandCSSASet() : Command("SASET", 2, 3) + CommandCSSASet(Module *creator) : Command(creator, "chanserv/saset", 2, 3, "chanserv/saset") { this->SetDesc(_("Forcefully set channel options and information")); + this->SetSyntax(_("\002channel\002 \037option\037 \037parameters\037")); } - ~CommandCSSASet() + void Execute(CommandSource &source, const std::vector<Anope::string> ¶ms) { - this->subcommands.clear(); - } - - CommandReturn Execute(CommandSource &source, const std::vector<Anope::string> ¶ms) - { - User *u = source.u; - - if (readonly) - { - source.Reply(_(CHAN_SET_DISABLED)); - return MOD_CONT; - } - - // XXX Remove after 1.9.4 release - if (params[1].equals_ci("MLOCK")) - { - source.Reply(_(CHAN_SET_MLOCK_DEPRECATED), Config->UseStrictPrivMsgString.c_str(), Config->s_ChanServ.c_str()); - return MOD_CONT; - } - - Command *c = this->FindCommand(params[1]); - - if (c) - { - ChannelInfo *ci = source.ci; - Anope::string cmdparams = ci->name; - for (std::vector<Anope::string>::const_iterator it = params.begin() + 2, it_end = params.end(); it != it_end; ++it) - cmdparams += " " + *it; - Log(LOG_ADMIN, u, this, ci) << params[1] << " " << cmdparams; - mod_run_cmd(chanserv->Bot(), u, NULL, c, params[1], cmdparams); - } - else - { - source.Reply(_("Unknown SASET option \002%s\002."), params[1].c_str()); - source.Reply(_(MORE_INFO), Config->UseStrictPrivMsgString.c_str(), Config->s_ChanServ.c_str(), "SET"); - } - - return MOD_CONT; + this->OnSyntaxError(source, ""); + return; } bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - if (subcommand.empty()) - { - source.Reply(_("Syntax: SASET \002channel\002 \037option\037 \037parameters\037\n" - " \n" - "Allows Services Operators to forcefully change settings\n" - "on channels.\n" - " \n" - "Available options:")); - for (subcommand_map::iterator it = this->subcommands.begin(), it_end = this->subcommands.end(); it != it_end; ++it) - it->second->OnServHelp(source); - source.Reply(_("Type \002%s%s HELP SASET \037option\037\002 for more information on a\n" - "particular option."), Config->UseStrictPrivMsgString.c_str(), Config->s_ChanServ.c_str()); - return true; - } - else + this->SendSyntax(source); + source.Reply(" "); + source.Reply(_("Allows Services Operators to forcefully change settings\n" + "on channels.\n" + " \n" + "Available options:")); + Anope::string this_name = source.command; + for (command_map::iterator it = source.owner->commands.begin(), it_end = source.owner->commands.end(); it != it_end; ++it) { - Command *c = this->FindCommand(subcommand); - - if (c) - return c->OnHelp(source, subcommand); + if (it->first.find_ci(this_name + " ") == 0) + { + service_reference<Command> command(it->second); + if (command) + { + source.command = it->first; + command->OnServHelp(source); + } + } } - - return false; - } - - void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) - { - SyntaxError(source, "SASET", _(CHAN_SASET_SYNTAX)); - } - - bool AddSubcommand(Module *creator, Command *c) - { - c->module = creator; - c->service = this->service; - return this->subcommands.insert(std::make_pair(c->name, c)).second; - } - - bool DelSubcommand(Command *c) - { - return this->subcommands.erase(c->name); - } - - Command *FindCommand(const Anope::string &subcommand) - { - subcommand_map::const_iterator it = this->subcommands.find(subcommand); - - if (it != this->subcommands.end()) - return it->second; - - return NULL; + source.Reply(_("Type \002%s%s HELP SASET \037option\037\002 for more information on a\n" + "particular option."), Config->UseStrictPrivMsgString.c_str(), source.owner->nick.c_str()); + return true; } }; @@ -127,14 +60,12 @@ class CSSASet : public Module CommandCSSASet commandcssaset; public: - CSSASet(const Anope::string &modname, const Anope::string &creator) : Module(modname, creator, CORE) + CSSASet(const Anope::string &modname, const Anope::string &creator) : Module(modname, creator, CORE), + commandcssaset(this) { this->SetAuthor("Anope"); - if (!chanserv) - throw ModuleException("ChanServ is not loaded!"); - - this->AddCommand(chanserv->Bot(), &commandcssaset); + ModuleManager::RegisterService(&commandcssaset); } }; |