summaryrefslogtreecommitdiff
path: root/modules/core/os_mode.cpp
diff options
context:
space:
mode:
authorAdam <Adam@anope.org>2011-02-11 18:30:58 -0500
committerAdam <Adam@anope.org>2011-02-11 18:30:58 -0500
commit9ef7352e69bc092bba77a085dfa0f91a5793e038 (patch)
tree860d87f827e6513be647208f2429d29b076fbf15 /modules/core/os_mode.cpp
parent2529ff6daef7eb387d2fce4c6df5a31029fd5bb2 (diff)
Merged os_umode into os_mode
Diffstat (limited to 'modules/core/os_mode.cpp')
-rw-r--r--modules/core/os_mode.cpp48
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> &params)
{
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"));
}
};