diff options
-rw-r--r-- | data/example.conf | 6 | ||||
-rw-r--r-- | docs/Changes | 1 | ||||
-rw-r--r-- | docs/Changes.conf | 2 | ||||
-rw-r--r-- | modules/core/os_mode.cpp | 48 | ||||
-rw-r--r-- | modules/core/os_umode.cpp | 89 |
5 files changed, 40 insertions, 106 deletions
diff --git a/data/example.conf b/data/example.conf index 151f6f97b..3b8e2fd18 100644 --- a/data/example.conf +++ b/data/example.conf @@ -715,7 +715,7 @@ log * operserv/szline operserv/staff operserv/defcon * operserv/modload operserv/jupe operserv/set operserv/noop * operserv/quit operserv/update operserv/reload operserv/restart - * operserv/shutdown operserv/svsnick operserv/oline operserv/umode + * operserv/shutdown operserv/svsnick operserv/oline * * Firstly, we define 'opertypes' which are named whatever we want ('Network Administrator', etc). * These can contain commands for oper-only strings (see above) which grants access to that specific command, @@ -756,7 +756,7 @@ opertype inherits = "Services Operator" - commands = "chanserv/access/list chanserv/drop chanserv/forbid chanserv/getkey chanserv/set/noexpire memoserv/sendall nickserv/saset/* nickserv/getemail operserv/global operserv/news operserv/jupe operserv/svsnick operserv/stats operserv/oline operserv/defcon operserv/noop operserv/umode" + commands = "chanserv/access/list chanserv/drop chanserv/forbid chanserv/getkey chanserv/set/noexpire memoserv/sendall nickserv/saset/* nickserv/getemail operserv/global operserv/news operserv/jupe operserv/svsnick operserv/stats operserv/oline operserv/defcon operserv/noop" privs = "*" } @@ -1475,7 +1475,7 @@ operserv * * This directive is optional, but highly recommended. */ - modules = "os_help os_global os_stats os_staff os_mode os_kick os_akill os_snline os_sqline os_szline os_chanlist os_userlist os_news os_session os_noop os_jupe os_ignore os_set os_reload os_update os_restart os_quit os_shutdown os_defcon os_chankill os_svsnick os_oline os_umode os_modload os_modunload os_modreload os_modlist os_modinfo" + modules = "os_help os_global os_stats os_staff os_mode os_kick os_akill os_snline os_sqline os_szline os_chanlist os_userlist os_news os_session os_noop os_jupe os_ignore os_set os_reload os_update os_restart os_quit os_shutdown os_defcon os_chankill os_svsnick os_oline os_modload os_modunload os_modreload os_modlist os_modinfo" /* * If set, Services Admins will be able to use SUPERADMIN [ON|OFF] which will temporarily grant diff --git a/docs/Changes b/docs/Changes index 83f84e072..d23343937 100644 --- a/docs/Changes +++ b/docs/Changes @@ -6,6 +6,7 @@ A Ability for users to delete their own access in channels A Ability for users with registrations pending to drop their registrations with /nickserv drop A Added support for Plexus 3 A Readded in support for /cs op/deop/etc to op/deop you in all channels +A Added support for ngIRCd F Changed the GHOST command to not allow ghosting unidentified users if the RECOVER command exists F Some failed logic in /operserv exception that prevents proper exceptions from being added F Fixed the anope_os_sxlines MySQL table and code to work after restarting diff --git a/docs/Changes.conf b/docs/Changes.conf index eeb1f06eb..2ce35ed2a 100644 --- a/docs/Changes.conf +++ b/docs/Changes.conf @@ -7,6 +7,8 @@ chanserv:suspendexpire and chanserv:forbidexpire added module added cs_entrymsg nickserv:modules added ns_ajoin options:nomlock added +opertype:commands removed operserv/umode +operserv:modules removed os_umode Anope Version 1.9.3 ------------------ 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) |