aboutsummaryrefslogtreecommitdiffstats
path: root/src/modules
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
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')
-rw-r--r--src/modules/m_deaf.cpp36
-rw-r--r--src/modules/m_delayjoin.cpp40
-rw-r--r--src/modules/m_permchannels.cpp19
-rw-r--r--src/modules/m_services_account.cpp52
-rw-r--r--src/modules/m_servprotect.cpp10
5 files changed, 77 insertions, 80 deletions
diff --git a/src/modules/m_deaf.cpp b/src/modules/m_deaf.cpp
index e8644298c..7702e2225 100644
--- a/src/modules/m_deaf.cpp
+++ b/src/modules/m_deaf.cpp
@@ -29,42 +29,46 @@
#include "modules/ctctags.h"
// User mode +d - filter out channel messages and channel notices
-class DeafMode : public ModeHandler
+class DeafMode final
+ : public SimpleUserMode
{
public:
- DeafMode(Module* Creator) : ModeHandler(Creator, "deaf", 'd', PARAM_NONE, MODETYPE_USER) { }
+ DeafMode(Module* Creator)
+ : SimpleUserMode(Creator, "deaf", 'd')
+ {
+ }
ModeAction OnModeChange(User* source, User* dest, Channel* channel, Modes::Change& change) override
{
- if (change.adding == dest->IsModeSet(this))
- return MODEACTION_DENY;
-
- if (change.adding)
+ if (SimpleUserMode::OnModeChange(source, dest, channel, change) == MODEACTION_ALLOW)
+ {
dest->WriteNotice("*** You have enabled user mode +d, deaf mode. This mode means you WILL NOT receive any messages from any channels you are in. If you did NOT mean to do this, use /mode " + dest->nick + " -d.");
+ return MODEACTION_ALLOW;
+ }
- dest->SetMode(this, change.adding);
- return MODEACTION_ALLOW;
+ return MODEACTION_DENY;
}
};
// User mode +D - filter out user messages and user notices
-class PrivDeafMode : public ModeHandler
+class PrivDeafMode final
+ : public SimpleUserMode
{
public:
- PrivDeafMode(Module* Creator) : ModeHandler(Creator, "privdeaf", 'D', PARAM_NONE, MODETYPE_USER)
+ PrivDeafMode(Module* Creator)
+ : SimpleUserMode(Creator, "privdeaf", 'D')
{
}
ModeAction OnModeChange(User* source, User* dest, Channel* channel, Modes::Change& change) override
{
- if (change.adding == dest->IsModeSet(this))
- return MODEACTION_DENY;
-
- if (change.adding)
+ if (SimpleUserMode::OnModeChange(source, dest, channel, change) == MODEACTION_ALLOW)
+ {
dest->WriteNotice("*** You have enabled user mode +D, private deaf mode. This mode means you WILL NOT receive any messages and notices from any nicks. If you did NOT mean to do this, use /mode " + dest->nick + " -D.");
+ return MODEACTION_ALLOW;
+ }
- dest->SetMode(this, change.adding);
- return MODEACTION_ALLOW;
+ return MODEACTION_DENY;
}
};
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 */
diff --git a/src/modules/m_permchannels.cpp b/src/modules/m_permchannels.cpp
index 33c8abbe1..dc3fbd0d1 100644
--- a/src/modules/m_permchannels.cpp
+++ b/src/modules/m_permchannels.cpp
@@ -32,25 +32,26 @@
/** Handles the +P channel mode
*/
-class PermChannel : public ModeHandler
+class PermChannel final
+ : public SimpleChannelMode
{
public:
PermChannel(Module* Creator)
- : ModeHandler(Creator, "permanent", 'P', PARAM_NONE, MODETYPE_CHANNEL)
+ : SimpleChannelMode(Creator, "permanent", 'P', true)
{
- oper = true;
}
ModeAction OnModeChange(User* source, User* dest, Channel* channel, Modes::Change& change) override
{
- if (change.adding == channel->IsModeSet(this))
- return MODEACTION_DENY;
+ if (SimpleChannelMode::OnModeChange(source, dest, channel, change))
+ {
+ if (!change.adding)
+ channel->CheckDestroy();
- channel->SetMode(this, change.adding);
- if (!change.adding)
- channel->CheckDestroy();
+ return MODEACTION_ALLOW;
+ }
- return MODEACTION_ALLOW;
+ return MODEACTION_DENY;
}
};
diff --git a/src/modules/m_services_account.cpp b/src/modules/m_services_account.cpp
index 446fd61a3..6271b35a0 100644
--- a/src/modules/m_services_account.cpp
+++ b/src/modules/m_services_account.cpp
@@ -52,54 +52,48 @@ enum
/** Channel mode +r - mark a channel as identified
*/
-class Channel_r : public ModeHandler
+class RegisteredChannel final
+ : public SimpleChannelMode
{
public:
- Channel_r(Module* Creator) : ModeHandler(Creator, "c_registered", 'r', PARAM_NONE, MODETYPE_CHANNEL) { }
+ RegisteredChannel(Module* Creator)
+ : SimpleChannelMode(Creator, "c_registered", 'r')
+ {
+ }
ModeAction OnModeChange(User* source, User* dest, Channel* channel, Modes::Change& change) override
{
- // Only a U-lined server may add or remove the +r mode.
- if (!IS_LOCAL(source))
- {
- // Only change the mode if it's not redundant
- if (change.adding != channel->IsModeSet(this))
- {
- channel->SetMode(this, change.adding);
- return MODEACTION_ALLOW;
- }
- }
- else
+ if (IS_LOCAL(source))
{
source->WriteNumeric(ERR_NOPRIVILEGES, "Only a server may modify the +r channel mode");
+ return MODEACTION_DENY;
}
- return MODEACTION_DENY;
+
+ return SimpleChannelMode::OnModeChange(source, dest, channel, change);
}
};
/** User mode +r - mark a user as identified
*/
-class User_r : public ModeHandler
+class RegisteredUser final
+ : public SimpleUserMode
{
public:
- User_r(Module* Creator) : ModeHandler(Creator, "u_registered", 'r', PARAM_NONE, MODETYPE_USER) { }
+ RegisteredUser(Module* Creator)
+ : SimpleUserMode(Creator, "u_registered", 'r')
+ {
+ }
ModeAction OnModeChange(User* source, User* dest, Channel* channel, Modes::Change& change) override
{
- if (!IS_LOCAL(source))
+ if (IS_LOCAL(source))
{
- if (change.adding != dest->IsModeSet(this))
- {
- dest->SetMode(this, change.adding);
- return MODEACTION_ALLOW;
- }
- }
- else
- {
- source->WriteNumeric(ERR_NOPRIVILEGES, "Only a server may modify the +r user mode");
+ source->WriteNumeric(ERR_NOPRIVILEGES, "Only a server may modify the +r channel mode");
+ return MODEACTION_DENY;
}
- return MODEACTION_DENY;
+
+ return SimpleUserMode::OnModeChange(source, dest, channel, change);
}
};
@@ -193,8 +187,8 @@ class ModuleServicesAccount
SimpleChannelMode reginvitemode;
SimpleChannelMode regmoderatedmode;
SimpleUserMode regdeafmode;
- Channel_r chanregmode;
- User_r userregmode;
+ RegisteredChannel chanregmode;
+ RegisteredUser userregmode;
AccountExtItemImpl accountname;
AccountExtBan accountextban;
UnauthedExtBan unauthedextban;
diff --git a/src/modules/m_servprotect.cpp b/src/modules/m_servprotect.cpp
index 247a81da7..6dc0dbe63 100644
--- a/src/modules/m_servprotect.cpp
+++ b/src/modules/m_servprotect.cpp
@@ -34,12 +34,14 @@ enum
ERR_KILLDENY = 485
};
-/** Handles user mode +k
- */
-class ServProtectMode : public ModeHandler
+class ServProtectMode final
+ : public SimpleUserMode
{
public:
- ServProtectMode(Module* Creator) : ModeHandler(Creator, "servprotect", 'k', PARAM_NONE, MODETYPE_USER) { oper = true; }
+ ServProtectMode(Module* Creator)
+ : SimpleUserMode(Creator, "servprotect", 'k', true)
+ {
+ }
ModeAction OnModeChange(User* source, User* dest, Channel* channel, Modes::Change& change) override
{