diff options
Diffstat (limited to 'src/modules/m_helpmode.cpp')
| -rw-r--r-- | src/modules/m_helpmode.cpp | 18 |
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()) |
