From 7d597daf0483f3396aca61f1f6f927cf81214ea5 Mon Sep 17 00:00:00 2001 From: Sadie Powell Date: Tue, 5 May 2020 17:23:20 +0100 Subject: Fix shuns not being applied correctly. --- src/modules/m_shun.cpp | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) (limited to 'src/modules/m_shun.cpp') 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)"); -- cgit v1.2.3