aboutsummaryrefslogtreecommitdiff
path: root/src/modules/m_helpmode.cpp
diff options
context:
space:
mode:
authorGravatar Sadie Powell2023-02-27 21:17:40 +0000
committerGravatar Sadie Powell2023-02-27 21:40:20 +0000
commit0000a90d578cfa5832696656c0c168bc148a8e86 (patch)
treed0a0597a92f24de6d549afb816e64262abcff555 /src/modules/m_helpmode.cpp
parentMake module classes specify their priority manually. (diff)
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.
Diffstat (limited to 'src/modules/m_helpmode.cpp')
-rw-r--r--src/modules/m_helpmode.cpp18
1 files changed, 15 insertions, 3 deletions
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())