mirror of
https://github.com/inspircd/inspircd.git
synced 2025-03-10 02:59:01 -04:00
Allow enabling/disabling caps via GenericCap::SetActive()
This commit is contained in:
parent
8c2135aad0
commit
971788e42f
@ -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; }
|
||||
};
|
||||
|
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user