diff options
| author | 2021-06-01 02:30:31 +0100 | |
|---|---|---|
| committer | 2021-06-01 02:36:14 +0100 | |
| commit | 1f421861e6cc5d6e497ebb5aabba8d04d74fd4e5 (patch) | |
| tree | afea11b6ecfd11f0ee01838baacb29507b568e10 /src/modules/m_delayjoin.cpp | |
| parent | Rename Simple{Channel,User}ModeHandler to match other mode handlers. (diff) | |
Convert simple modes to use Simple{Channel,User}Mode.
Diffstat (limited to 'src/modules/m_delayjoin.cpp')
| -rw-r--r-- | src/modules/m_delayjoin.cpp | 40 |
1 files changed, 18 insertions, 22 deletions
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 */ |
