From 1f421861e6cc5d6e497ebb5aabba8d04d74fd4e5 Mon Sep 17 00:00:00 2001 From: Sadie Powell Date: Tue, 1 Jun 2021 02:30:31 +0100 Subject: Convert simple modes to use Simple{Channel,User}Mode. --- src/modules/m_delayjoin.cpp | 40 ++++++++++++++++++---------------------- 1 file changed, 18 insertions(+), 22 deletions(-) (limited to 'src/modules/m_delayjoin.cpp') diff --git a/src/modules/m_delayjoin.cpp b/src/modules/m_delayjoin.cpp index 700b88ad8..2a3f111b2 100644 --- a/src/modules/m_delayjoin.cpp +++ b/src/modules/m_delayjoin.cpp @@ -30,7 +30,8 @@ #include "modules/names.h" #include "modules/who.h" -class DelayJoinMode : public ModeHandler +class DelayJoinMode final + : public SimpleChannelMode { private: IntExtItem& unjoined; @@ -38,14 +39,28 @@ class DelayJoinMode : public ModeHandler public: DelayJoinMode(Module* Parent, IntExtItem& ext) - : ModeHandler(Parent, "delayjoin", 'D', PARAM_NONE, MODETYPE_CHANNEL) + : SimpleChannelMode(Parent, "delayjoin", 'D') , unjoined(ext) , servertime(Parent) { ranktoset = ranktounset = OP_VALUE; } - ModeAction OnModeChange(User* source, User* dest, Channel* channel, Modes::Change& change) override; + ModeAction OnModeChange(User* source, User* dest, Channel* channel, Modes::Change& change) override + { + if (SimpleChannelMode::OnModeChange(source, dest, channel, change)) + { + /* + * Make all users visible, as +D is being removed. If we don't do this, + * they remain permanently invisible on this channel! + */ + for (const auto& [member, _] : channel->GetUsers()) + RevealUser(member, channel); + return MODEACTION_ALLOW; + } + return MODEACTION_DENY; + } + void RevealUser(User* user, Channel* chan); }; @@ -131,25 +146,6 @@ class ModuleDelayJoin ModResult OnRawMode(User* user, Channel* channel, const Modes::Change& change) override; }; -ModeAction DelayJoinMode::OnModeChange(User* source, User* dest, Channel* channel, Modes::Change& change) -{ - /* no change */ - if (channel->IsModeSet(this) == change.adding) - return MODEACTION_DENY; - - if (!change.adding) - { - /* - * Make all users visible, as +D is being removed. If we don't do this, - * they remain permanently invisible on this channel! - */ - for (const auto& [member, _] : channel->GetUsers()) - RevealUser(member, channel); - } - channel->SetMode(this, change.adding); - return MODEACTION_ALLOW; -} - ModResult ModuleDelayJoin::OnNamesListItem(LocalUser* issuer, Membership* memb, std::string& prefixes, std::string& nick) { /* don't prevent the user from seeing themself */ -- cgit v1.3.1-10-gc9f91