diff --git a/Client.cpp b/Client.cpp index 1f6dcb26..3e8d26e4 100644 --- a/Client.cpp +++ b/Client.cpp @@ -436,10 +436,16 @@ void CClient::ReadLine(const CString& sData) { } if (strncasecmp(sTarget.c_str(), m_pUser->GetStatusPrefix().c_str(), m_pUser->GetStatusPrefix().length()) == 0) { -#ifdef _MODULES CString sModule = sTarget; sModule.LeftChomp(m_pUser->GetStatusPrefix().length()); + if (sModule == "status") { + StatusCTCP(sCTCP); + + return; + } + +#ifdef _MODULES CModule* pModule = m_pUser->GetModules().FindModule(sModule); if (pModule) { pModule->SetClient(this); @@ -571,6 +577,16 @@ bool CClient::DecKeepNickCounter() { return true; } +void CClient::StatusCTCP(const CString& sLine) { + CString sCommand = sLine.Token(0); + + if (sCommand.CaseCmp("PING") == 0) { + PutStatusNotice("\001PING " + sLine.Token(1, true) + "\001"); + } else if (sCommand.CaseCmp("VERSION") == 0) { + PutStatusNotice("\001VERSION " + CZNC::GetTag() + "\001"); + } +} + void CClient::UserCommand(const CString& sLine) { if (!m_pUser) { return; diff --git a/Client.h b/Client.h index b0159282..3cd5c55a 100644 --- a/Client.h +++ b/Client.h @@ -98,6 +98,7 @@ public: bool DecKeepNickCounter(); void UserCommand(const CString& sCommand); + void StatusCTCP(const CString& sCommand); void IRCConnected(CIRCSock* pIRCSock); void IRCDisconnected(); void BouncedOff();