From 0000a90d578cfa5832696656c0c168bc148a8e86 Mon Sep 17 00:00:00 2001 From: Sadie Powell Date: Mon, 27 Feb 2023 21:17:40 +0000 Subject: Allow user mode +h (helpop) to override +H (hideoper) in /STATS P. Now we include +h users in the output inclusion doesn't inherently mean the user is an oper. Closes #1212. --- src/modules/m_helpmode.cpp | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) (limited to 'src/modules/m_helpmode.cpp') diff --git a/src/modules/m_helpmode.cpp b/src/modules/m_helpmode.cpp index 065848681..acc48e423 100644 --- a/src/modules/m_helpmode.cpp +++ b/src/modules/m_helpmode.cpp @@ -53,17 +53,26 @@ class ModuleHelpMode final , public Whois::EventListener { private: + bool ignorehideoper; HelpOp helpop; + UserModeReference hideoper; public: ModuleHelpMode() : Module(VF_VENDOR, "Adds user mode h (helpop) which marks a server operator as being available for help.") - , Stats::EventListener(this) + , Stats::EventListener(this, 50) , Whois::EventListener(this) , helpop(this) + , hideoper(this, "hideoper") { } + void ReadConfig(ConfigStatus& status) override + { + const auto& tag = ServerInstance->Config->ConfValue("helpmode"); + ignorehideoper = tag->getBool("ignorehideoper", false); + } + ModResult OnStats(Stats::Context& stats) override { if (stats.GetSymbol() != 'P') @@ -71,8 +80,11 @@ public: for (auto* oper : helpop.helpopers) { - if (oper->IsOper() || oper->server->IsService()) - continue; // Ignore opers and services. + if (oper->server->IsService()) + continue; // Ignore services. + + if (oper->IsOper() && (!ignorehideoper || !oper->IsModeSet(hideoper))) + continue; // Ignore opers. std::string extra; if (oper->IsAway()) -- cgit v1.3.1-10-gc9f91