diff --git a/Client.cpp b/Client.cpp index acef5e7e..d7b2e374 100644 --- a/Client.cpp +++ b/Client.cpp @@ -846,5 +846,29 @@ void CClient::HandleCap(const CString& sLine) sList += *i + " "; } RespondCap("LIST :" + sList.TrimSuffix_n(" ")); + } else if (sSubCmd.Equals("CLEAR")) { + SCString ssRemoved; + for (SCString::iterator i = m_ssAcceptedCaps.begin(); i != m_ssAcceptedCaps.end(); ++i) { + bool bRemoving = false; + GLOBALMODULECALL(IsClientCapSupported(*i, false), m_pUser, this, bRemoving = true); + if (bRemoving) { + GLOBALMODULECALL(OnClientCapRequest(*i, false), m_pUser, this, ); + ssRemoved.insert(*i); + } + } + if (m_bNamesx) { + m_bNamesx = false; + ssRemoved.insert("multi-prefix"); + } + if (m_bUHNames) { + m_bUHNames = false; + ssRemoved.insert("userhost-in-names"); + } + CString sList = ""; + for (SCString::iterator i = ssRemoved.begin(); i != ssRemoved.end(); ++i) { + m_ssAcceptedCaps.erase(*i); + sList += "-" + *i + " "; + } + RespondCap("ACK :" + sList.TrimSuffix_n(" ")); } }