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/os_mode.cpp | |
parent | 2529ff6daef7eb387d2fce4c6df5a31029fd5bb2 (diff) |
Merged os_umode into os_mode
Diffstat (limited to 'modules/core/os_mode.cpp')
-rw-r--r-- | modules/core/os_mode.cpp | 48 |
1 files changed, 34 insertions, 14 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")); } }; |