From e37ee111a8bb9189b495489dce2fb90180160ebe Mon Sep 17 00:00:00 2001 From: Sadie Powell Date: Fri, 7 Oct 2022 18:12:58 +0100 Subject: Fix channels with +D or +u set being picked for the /WHO response. --- src/modules/m_auditorium.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'src/modules/m_auditorium.cpp') diff --git a/src/modules/m_auditorium.cpp b/src/modules/m_auditorium.cpp index 0e18d3e36..9960b0a78 100644 --- a/src/modules/m_auditorium.cpp +++ b/src/modules/m_auditorium.cpp @@ -64,6 +64,7 @@ class ModuleAuditorium : public Module , public Names::EventListener , public Who::EventListener + , public Who::VisibleEventListener { CheckExemption::EventProvider exemptionprov; AuditoriumMode aum; @@ -76,6 +77,7 @@ class ModuleAuditorium ModuleAuditorium() : Names::EventListener(this) , Who::EventListener(this) + , Who::VisibleEventListener(this) , exemptionprov(this) , aum(this) , joinhook(this) @@ -193,6 +195,12 @@ class ModuleAuditorium return MOD_RES_PASSTHRU; return MOD_RES_DENY; } + + ModResult OnWhoVisible(const Who::Request& request, LocalUser* source, Membership* memb) CXX11_OVERRIDE + { + // Never pick a channel as the first visible one if the channel is in auditorium mode. + return IsVisible(memb) || CanSee(source, memb) ? MOD_RES_PASSTHRU : MOD_RES_DENY; + } }; JoinHook::JoinHook(ModuleAuditorium* mod) -- cgit v1.3.1-10-gc9f91