aboutsummaryrefslogtreecommitdiff
path: root/src/modules/m_delayjoin.cpp
diff options
context:
space:
mode:
authorGravatar Sadie Powell2021-06-01 02:30:31 +0100
committerGravatar Sadie Powell2021-06-01 02:36:14 +0100
commit1f421861e6cc5d6e497ebb5aabba8d04d74fd4e5 (patch)
treeafea11b6ecfd11f0ee01838baacb29507b568e10 /src/modules/m_delayjoin.cpp
parentRename 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.cpp40
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 */