aboutsummaryrefslogtreecommitdiffstats
path: root/src/modules/m_cloak.cpp
diff options
context:
space:
mode:
authorGravatar Sadie Powell2023-02-20 19:49:05 +0000
committerGravatar Sadie Powell2023-02-20 19:49:05 +0000
commit0eebbc2543c84802abaf107e04bfb5c71c0b6f8c (patch)
tree1a13c5f65ebec9ba7cba898da362fdc09dddadb8 /src/modules/m_cloak.cpp
parentMerge the servprotect module into the services module. (diff)
downloadinspircd++-0eebbc2543c84802abaf107e04bfb5c71c0b6f8c.tar.gz
inspircd++-0eebbc2543c84802abaf107e04bfb5c71c0b6f8c.tar.bz2
inspircd++-0eebbc2543c84802abaf107e04bfb5c71c0b6f8c.zip
Avoid setting -x+x when a reset cloak has not changed.
Diffstat (limited to 'src/modules/m_cloak.cpp')
-rw-r--r--src/modules/m_cloak.cpp25
1 files changed, 19 insertions, 6 deletions
diff --git a/src/modules/m_cloak.cpp b/src/modules/m_cloak.cpp
index 27c3e7352..b6180419e 100644
--- a/src/modules/m_cloak.cpp
+++ b/src/modules/m_cloak.cpp
@@ -89,6 +89,12 @@ private:
// Holds the list of cloaks for a user.
ListExtItem<Cloak::List> ext;
+ std::string GetFrontCloak(LocalUser* user)
+ {
+ auto* cloaks = GetCloaks(user);
+ return cloaks ? cloaks->front() : "";
+ }
+
public:
CloakAPI(Module* Creator, CloakMethodList& cm, ModeHandler* mh)
: Cloak::APIBase(Creator)
@@ -122,14 +128,21 @@ public:
void ResetCloaks(LocalUser* user, bool resetdisplay) override
{
+ const std::string oldcloak = GetFrontCloak(user);
ext.Unset(user);
- if (resetdisplay && user->IsModeSet(cloakmode))
- {
- Modes::ChangeList changelist;
- changelist.push_remove(cloakmode);
+
+ if (!resetdisplay || !user->IsModeSet(cloakmode))
+ return; // Not resetting the display or not cloaked.
+
+ const std::string newcloak = GetFrontCloak(user);
+ if (oldcloak == newcloak)
+ return; // New front cloak is the same.
+
+ Modes::ChangeList changelist;
+ changelist.push_remove(cloakmode);
+ if (!newcloak.empty())
changelist.push_add(cloakmode);
- ServerInstance->Modes.Process(ServerInstance->FakeClient, nullptr, user, changelist);
- }
+ ServerInstance->Modes.Process(ServerInstance->FakeClient, nullptr, user, changelist);
}
};