diff options
-rw-r--r-- | docs/conf/modules.conf.example | 13 | ||||
-rw-r--r-- | src/modules/m_redirect.cpp | 28 |
2 files changed, 7 insertions, 34 deletions
diff --git a/docs/conf/modules.conf.example b/docs/conf/modules.conf.example index b2d759ff8..e5fbab7e0 100644 --- a/docs/conf/modules.conf.example +++ b/docs/conf/modules.conf.example @@ -1517,17 +1517,10 @@ #<randquote file="quotes.txt"> #-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-# -# Redirect module: Adds channel redirection mode +L. # -# Optional: <redirect:antiredirect> to add usermode +L to stop forced # -# redirection and instead print an error. # -# # -# Note: You can not update this with a simple rehash, it requires # -# reloading the module for it to take effect. # -# This also breaks linking to servers that do not have the option. # -# This defaults to false for the 2.0 version, it will be enabled in # -# all the future versions. # +# Redirect module: Adds channel mode +L which redirects users to # +# another channel when the channel has reached its user limit and # +# user mode +L which stops redirection. # #<module name="redirect"> -#<redirect antiredirect="true"> #-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-# # Regular expression provider for glob or wildcard (?/*) matching. diff --git a/src/modules/m_redirect.cpp b/src/modules/m_redirect.cpp index 479dd6d0f..b3dc6e94d 100644 --- a/src/modules/m_redirect.cpp +++ b/src/modules/m_redirect.cpp @@ -72,39 +72,20 @@ class Redirect : public ParamMode<Redirect, LocalStringExt> } }; -/** Handles usermode +L to stop forced redirection and print an error. -*/ -class AntiRedirect : public SimpleUserModeHandler -{ - public: - AntiRedirect(Module* Creator) : SimpleUserModeHandler(Creator, "antiredirect", 'L') - { - if (!ServerInstance->Config->ConfValue("redirect")->getBool("antiredirect")) - DisableAutoRegister(); - } -}; - class ModuleRedirect : public Module { Redirect re; - AntiRedirect re_u; + SimpleUserModeHandler antiredirectmode; ChanModeReference limitmode; - bool UseUsermode; public: ModuleRedirect() : re(this) - , re_u(this) + , antiredirectmode(this, "antiredirect", 'L') , limitmode(this, "limit") { } - void init() CXX11_OVERRIDE - { - /* Setting this here so it isn't changable by rehasing the config later. */ - UseUsermode = ServerInstance->Config->ConfValue("redirect")->getBool("antiredirect"); - } - ModResult OnUserPreJoin(LocalUser* user, Channel* chan, const std::string& cname, std::string& privs, const std::string& keygiven) CXX11_OVERRIDE { if (chan) @@ -122,9 +103,8 @@ class ModuleRedirect : public Module user->WriteNumeric(470, cname, '*', "You may not join this channel. A redirect is set, but you may not be redirected as it is a circular loop."); return MOD_RES_DENY; } - /* We check the bool value here to make sure we have it enabled, if we don't then - usermode +L might be assigned to something else. */ - if (UseUsermode && user->IsModeSet(re_u)) + + if (user->IsModeSet(antiredirectmode)) { user->WriteNumeric(470, cname, channel, "Force redirection stopped."); return MOD_RES_DENY; |