diff options
-rw-r--r-- | src/modules/m_shun.cpp | 24 |
1 files changed, 16 insertions, 8 deletions
diff --git a/src/modules/m_shun.cpp b/src/modules/m_shun.cpp index a53ed43b8..a62d8369d 100644 --- a/src/modules/m_shun.cpp +++ b/src/modules/m_shun.cpp @@ -158,6 +158,20 @@ class ModuleShun : public Module, public Stats::EventListener bool NotifyOfShun; bool affectopers; + bool IsShunned(LocalUser* user) + { + // Exempt the user from shuns if they are an oper and affectopers is disabled. + if (!affectopers && user->IsOper()) + return false; + + // Exempt the user from shuns if they are an oper with the servers/ignore-shun privilege. + if (user->HasPrivPermission("servers/ignore-shun")) + return false; + + // Check whether the user is actually shunned. + return ServerInstance->XLines->MatchesLine("SHUN", user); + } + public: ModuleShun() : Stats::EventListener(this) @@ -209,16 +223,10 @@ class ModuleShun : public Module, public Stats::EventListener ModResult OnPreCommand(std::string& command, CommandBase::Params& parameters, LocalUser* user, bool validated) CXX11_OVERRIDE { - if (validated) + if (validated || !IsShunned(user)) return MOD_RES_PASSTHRU; - // Exempt the user from shuns if: - // (1) They are an oper and affectopers is disabled. - // (2) They have the servers/ignore-shun privilege. - if ((!affectopers && user->IsOper()) || user->HasPrivPermission("servers/ignore-shun")) - return MOD_RES_PASSTHRU; - - if (ServerInstance->XLines->MatchesLine("SHUN", user) && !ShunEnabledCommands.count(command)) + if (!ShunEnabledCommands.count(command)) { if (NotifyOfShun) user->WriteNotice("*** Command " + command + " not processed, as you have been blocked from issuing commands (SHUN)"); |