diff options
| author | Adam <Adam@anope.org> | 2011-02-11 18:30:58 -0500 |
|---|---|---|
| committer | Adam <Adam@anope.org> | 2011-02-11 18:30:58 -0500 |
| commit | 9ef7352e69bc092bba77a085dfa0f91a5793e038 (patch) | |
| tree | 860d87f827e6513be647208f2429d29b076fbf15 /modules/core | |
| parent | 2529ff6daef7eb387d2fce4c6df5a31029fd5bb2 (diff) | |
Merged os_umode into os_mode
Diffstat (limited to 'modules/core')
| -rw-r--r-- | modules/core/os_mode.cpp | 48 | ||||
| -rw-r--r-- | modules/core/os_umode.cpp | 89 |
2 files changed, 34 insertions, 103 deletions
diff --git a/modules/core/os_mode.cpp b/modules/core/os_mode.cpp index 5b2bb051a..3ded8a538 100644 --- a/modules/core/os_mode.cpp +++ b/modules/core/os_mode.cpp @@ -18,43 +18,63 @@ class CommandOSMode : public Command public: CommandOSMode() : Command("MODE", 2, 2, "operserv/mode") { - this->SetDesc("Change a channel's modes"); + this->SetDesc("Change channel or user modes"); } CommandReturn Execute(CommandSource &source, const std::vector<Anope::string> ¶ms) { User *u = source.u; - const Anope::string &chan = params[0]; + const Anope::string &target = params[0]; const Anope::string &modes = params[1]; - Channel *c; - if (!(c = findchan(chan))) - source.Reply(LanguageString::CHAN_X_NOT_IN_USE, chan.c_str()); - else if (c->bouncy_modes) - source.Reply(_("Services is unable to change modes. Are your servers' U:lines configured correctly?")); + if (target[0] == '#') + { + Channel *c = findchan(target); + if (!c) + source.Reply(LanguageString::CHAN_X_NOT_IN_USE, target.c_str()); + else if (c->bouncy_modes) + source.Reply(_("Services is unable to change modes. Are your servers' U:lines configured correctly?")); + else + { + c->SetModes(OperServ, false, modes.c_str()); + + if (Config->WallOSMode) + ircdproto->SendGlobops(OperServ, "\2%s\2 used MODE %s on %s", u->nick.c_str(), modes.c_str(), c->name.c_str()); + } + } else { - c->SetModes(OperServ, false, modes.c_str()); + User *u2 = finduser(target); + if (!u2) + source.Reply(LanguageString::NICK_X_NOT_IN_USE, target.c_str()); + else + { + u2->SetModes(OperServ, "%s", modes.c_str()); + source.Reply(_("Changed usermodes of \002%s\002 to %s."), u2->nick.c_str(), modes.c_str()); - if (Config->WallOSMode) - ircdproto->SendGlobops(OperServ, "%s used MODE %s on %s", u->nick.c_str(), modes.c_str(), chan.c_str()); + u2->SendMessage(OperServ, _("\002%s\002 changed your usermodes to %s."), u->nick.c_str(), modes.c_str()); + + if (Config->WallOSMode) + ircdproto->SendGlobops(OperServ, "\2%s\2 used MODE %s %s", u->nick.c_str(), modes.c_str(), u2->nick.c_str()); + } } + return MOD_CONT; } bool OnHelp(CommandSource &source, const Anope::string &subcommand) { - source.Reply(_("Syntax: \002MODE \037channel\037 \037modes\037\002\n" + source.Reply(_("Syntax: \002MODE {\037channel\037|\037user\037} \037modes\037\002\n" " \n" - "Allows Services operators to set channel modes for any\n" - "channel. Parameters are the same as for the standard /MODE\n" + "Allows Services operators to change modes for any channel or\n" + "user. Parameters are the same as for the standard /MODE\n" "command.")); return true; } void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) { - SyntaxError(source, "MODE", _("MODE \037channel\037 \037modes\037")); + SyntaxError(source, "MODE", _("MODE {\037channel\037|\037user\037} \037modes\037")); } }; diff --git a/modules/core/os_umode.cpp b/modules/core/os_umode.cpp deleted file mode 100644 index 1e1720455..000000000 --- a/modules/core/os_umode.cpp +++ /dev/null @@ -1,89 +0,0 @@ -/* OperServ core functions - * - * (C) 2003-2011 Anope Team - * Contact us at team@anope.org - * - * Please read COPYING and README for further details. - * - * Based on the original code of Epona by Lara. - * Based on the original code of Services by Andy Church. - */ - -/*************************************************************************/ - -#include "module.h" - -class CommandOSUMode : public Command -{ - public: - CommandOSUMode() : Command("UMODE", 2, 2, "operserv/umode") - { - this->SetDesc("Change a user's modes"); - } - - CommandReturn Execute(CommandSource &source, const std::vector<Anope::string> ¶ms) - { - User *u = source.u; - const Anope::string &nick = params[0]; - const Anope::string &modes = params[1]; - - User *u2; - - /** - * Only accept a +/- mode string - *-rob - **/ - if (modes[0] != '+' && modes[0] != '-') - { - this->OnSyntaxError(source, ""); - return MOD_CONT; - } - if (!(u2 = finduser(nick))) - source.Reply(LanguageString::NICK_X_NOT_IN_USE, nick.c_str()); - else - { - u2->SetModes(OperServ, "%s", modes.c_str()); - - source.Reply(_("Changed usermodes of \002%s\002."), nick.c_str()); - u2->SendMessage(OperServ, _("\002%s\002 changed your usermodes."), u->nick.c_str()); - - if (Config->WallOSMode) - ircdproto->SendGlobops(OperServ, "\2%s\2 used UMODE on %s", u->nick.c_str(), nick.c_str()); - } - return MOD_CONT; - } - - bool OnHelp(CommandSource &source, const Anope::string &subcommand) - { - source.Reply(_("Syntax: \002UMODE \037user\037 \037modes\037\002\n" - " \n" - "Allows Services Opers to set user modes for any user.\n" - "Parameters are the same as for the standard /MODE\n" - "command.")); - return true; - } - - void OnSyntaxError(CommandSource &source, const Anope::string &subcommand) - { - SyntaxError(source, "UMODE", _("UMODE \037nick\037 \037modes\037")); - } -}; - -class OSUMode : public Module -{ - CommandOSUMode commandosumode; - - public: - OSUMode(const Anope::string &modname, const Anope::string &creator) : Module(modname, creator) - { - if (!ircd->umode) - throw ModuleException("Your IRCd does not support setting umodes"); - - this->SetAuthor("Anope"); - this->SetType(CORE); - - this->AddCommand(OperServ, &commandosumode); - } -}; - -MODULE_INIT(OSUMode) |
