Modulefy core server-dependent caps

This commit is contained in:
Alexey Sokolov
2024-01-13 23:34:03 +00:00
parent da3919245b
commit f7ff0ee3f3
6 changed files with 86 additions and 15 deletions
-11
View File
@@ -764,17 +764,6 @@ CClient::CoreCaps() {
}}},
{"cap-notify",
{false, [](CClient* pClient, bool bVal) { pClient->m_bCapNotify = bVal; }}},
{"away-notify",
{true, [](CClient* pClient, bool bVal) { pClient->m_bAwayNotify = bVal; }}},
{"account-notify",
{true, [](CClient* pClient, bool bVal) { pClient->m_bAccountNotify = bVal; }}},
{"account-tag",
{true, [](CClient* pClient, bool bVal) {
pClient->m_bAccountTag = bVal;
pClient->SetTagSupport("account", bVal);
}}},
{"extended-join",
{true, [](CClient* pClient, bool bVal) { pClient->m_bExtendedJoin = bVal; }}},
};
// For compatibility with older clients
-4
View File
@@ -379,11 +379,7 @@ bool CIRCSock::OnCapabilityMessage(CMessage& Message) {
std::map<CString, std::function<void(bool bVal)>> mSupportedCaps = {
{"multi-prefix", [this](bool bVal) { m_bNamesx = bVal; }},
{"userhost-in-names", [this](bool bVal) { m_bUHNames = bVal; }},
{"away-notify", [this](bool bVal) { m_bAwayNotify = bVal; }},
{"account-notify", [this](bool bVal) { m_bAccountNotify = bVal; }},
{"account-tag", [this](bool bVal) { m_bAccountTag = bVal; }},
{"cap-notify", [](bool bVal) {}},
{"extended-join", [this](bool bVal) { m_bExtendedJoin = bVal; }},
{"server-time", [this](bool bVal) { m_bServerTime = bVal; }},
{"znc.in/server-time-iso",
[this](bool bVal) { m_bServerTime = bVal; }},
+7
View File
@@ -1621,9 +1621,12 @@ bool CModules::OnServerCapAvailable(const CString& sCap, const CString& sValue)
pMod->SetClient(m_pClient);
if (m_pUser) {
CUser* pOldUser = pMod->GetUser();
CIRCNetwork* pOldNetwork = pMod->GetNetwork();
pMod->SetUser(m_pUser);
pMod->SetNetwork(m_pNetwork);
bResult |= pMod->OnServerCap302Available(sCap, sValue);
pMod->SetUser(pOldUser);
pMod->SetNetwork(pOldNetwork);
} else {
// WTF? Is that possible?
bResult |= pMod->OnServerCap302Available(sCap, sValue);
@@ -1691,9 +1694,12 @@ bool CModules::IsClientCapSupported(CClient* pClient, const CString& sCap,
pMod->SetClient(m_pClient);
if (m_pUser) {
CUser* pOldUser = pMod->GetUser();
CIRCNetwork* pOldNetwork = pMod->GetNetwork();
pMod->SetUser(m_pUser);
pMod->SetNetwork(m_pNetwork);
bResult |= pMod->IsClientCapSupported(pClient, sCap, bState);
pMod->SetUser(pOldUser);
pMod->SetNetwork(pOldNetwork);
} else {
// WTF? Is that possible?
bResult |= pMod->IsClientCapSupported(pClient, sCap, bState);
@@ -1998,6 +2004,7 @@ void CModules::GetDefaultMods(set<CModInfo>& ssMods,
const map<CString, CModInfo::EModuleType> ns = {
{"chansaver", CModInfo::UserModule},
{"controlpanel", CModInfo::UserModule},
{"corecaps", CModInfo::GlobalModule},
{"simple_away", CModInfo::NetworkModule},
{"webadmin", CModInfo::GlobalModule}};