summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/modules/cap.h11
-rw-r--r--src/modules/m_ircv3.cpp27
2 files changed, 20 insertions, 18 deletions
diff --git a/include/modules/cap.h b/include/modules/cap.h
index cc1cb8d8c..fae7fff15 100644
--- a/include/modules/cap.h
+++ b/include/modules/cap.h
@@ -40,11 +40,14 @@ class CapEvent : public Event
class GenericCap
{
+ bool active;
+
public:
LocalIntExt ext;
const std::string cap;
GenericCap(Module* parent, const std::string& Cap)
- : ext("cap_" + Cap, ExtensionItem::EXT_USER, parent)
+ : active(true)
+ , ext("cap_" + Cap, ExtensionItem::EXT_USER, parent)
, cap(Cap)
{
}
@@ -54,6 +57,9 @@ class GenericCap
if (ev.id != "cap_request")
return;
+ if (!active)
+ return;
+
CapEvent *data = static_cast<CapEvent*>(&ev);
if (data->type == CapEvent::CAPEVENT_REQ)
{
@@ -87,4 +93,7 @@ class GenericCap
ext.set(data->user, 0);
}
}
+
+ void SetActive(bool newstate) { active = newstate; }
+ bool IsActive() const { return active; }
};
diff --git a/src/modules/m_ircv3.cpp b/src/modules/m_ircv3.cpp
index b80c110f4..861ccec14 100644
--- a/src/modules/m_ircv3.cpp
+++ b/src/modules/m_ircv3.cpp
@@ -45,9 +45,6 @@ class ModuleIRCv3 : public Module, public AccountEventListener
GenericCap cap_accountnotify;
GenericCap cap_awaynotify;
GenericCap cap_extendedjoin;
- bool accountnotify;
- bool awaynotify;
- bool extendedjoin;
CUList last_excepts;
@@ -63,20 +60,16 @@ class ModuleIRCv3 : public Module, public AccountEventListener
void ReadConfig(ConfigStatus& status) CXX11_OVERRIDE
{
ConfigTag* conf = ServerInstance->Config->ConfValue("ircv3");
- accountnotify = conf->getBool("accountnotify", true);
- awaynotify = conf->getBool("awaynotify", true);
- extendedjoin = conf->getBool("extendedjoin", true);
+ cap_accountnotify.SetActive(conf->getBool("accountnotify", true));
+ cap_awaynotify.SetActive(conf->getBool("awaynotify", true));
+ cap_extendedjoin.SetActive(conf->getBool("extendedjoin", true));
}
void OnEvent(Event& ev) CXX11_OVERRIDE
{
- if (awaynotify)
- cap_awaynotify.HandleEvent(ev);
- if (extendedjoin)
- cap_extendedjoin.HandleEvent(ev);
-
- if (accountnotify)
- cap_accountnotify.HandleEvent(ev);
+ cap_awaynotify.HandleEvent(ev);
+ cap_extendedjoin.HandleEvent(ev);
+ cap_accountnotify.HandleEvent(ev);
}
void OnAccountChange(User* user, const std::string& newaccount) CXX11_OVERRIDE
@@ -96,10 +89,10 @@ class ModuleIRCv3 : public Module, public AccountEventListener
void OnUserJoin(Membership* memb, bool sync, bool created, CUList& excepts) CXX11_OVERRIDE
{
// Remember who is not going to see the JOIN because of other modules
- if ((awaynotify) && (memb->user->IsAway()))
+ if ((cap_awaynotify.IsActive()) && (memb->user->IsAway()))
last_excepts = excepts;
- if (!extendedjoin)
+ if (!cap_extendedjoin.IsActive())
return;
/*
@@ -168,7 +161,7 @@ class ModuleIRCv3 : public Module, public AccountEventListener
ModResult OnSetAway(User* user, const std::string &awaymsg) CXX11_OVERRIDE
{
- if (awaynotify)
+ if (cap_awaynotify.IsActive())
{
// Going away: n!u@h AWAY :reason
// Back from away: n!u@h AWAY
@@ -183,7 +176,7 @@ class ModuleIRCv3 : public Module, public AccountEventListener
void OnPostJoin(Membership *memb) CXX11_OVERRIDE
{
- if ((!awaynotify) || (!memb->user->IsAway()))
+ if ((!cap_awaynotify.IsActive()) || (!memb->user->IsAway()))
return;
std::string line = ":" + memb->user->GetFullHost() + " AWAY :" + memb->user->awaymsg;