bool CModules::OnPrivBufferPlayLine(CClient& Client, CString& sLine) { MODHALTCHK(OnPrivBufferPlayLine(Client, sLine)); }
void CIRCNetwork::ClientConnected(CClient *pClient) { if (!m_pUser->MultiClients()) { BounceAllClients(); } m_vClients.push_back(pClient); unsigned int uIdx, uSize; MCString msParams; msParams["target"] = GetIRCNick().GetNick(); if (m_RawBuffer.IsEmpty()) { pClient->PutClient(":irc.znc.in 001 " + pClient->GetNick() + " :- Welcome to ZNC -"); } else { uSize = m_RawBuffer.Size(); for (uIdx = 0; uIdx < uSize; uIdx++) { pClient->PutClient(m_RawBuffer.GetLine(uIdx, *pClient, msParams)); } // The assumption is that the client got this nick from the 001 reply pClient->SetNick(GetIRCNick().GetNick()); } // Send the cached MOTD uSize = m_MotdBuffer.Size(); if (uSize > 0) { for (uIdx = 0; uIdx < uSize; uIdx++) { pClient->PutClient(m_MotdBuffer.GetLine(uIdx, *pClient, msParams)); } } else { pClient->PutClient(":irc.znc.in 422 :MOTD Cache is missing"); } if (GetIRCSock() != NULL) { CString sUserMode(""); const set<unsigned char>& scUserModes = GetIRCSock()->GetUserModes(); for (set<unsigned char>::const_iterator it = scUserModes.begin(); it != scUserModes.end(); ++it) { sUserMode += *it; } if (!sUserMode.empty()) { pClient->PutClient(":" + GetIRCNick().GetNickMask() + " MODE " + GetIRCNick().GetNick() + " :+" + sUserMode); } } if (m_bIRCAway) { // If they want to know their away reason they'll have to whois // themselves. At least we can tell them their away status... pClient->PutClient(":irc.znc.in 306 " + GetIRCNick().GetNick() + " :You have been marked as being away"); } const vector<CChan*>& vChans = GetChans(); for (unsigned int a = 0; a < vChans.size(); a++) { if ((vChans[a]->IsOn()) && (!vChans[a]->IsDetached())) { vChans[a]->JoinUser(true, "", pClient); } } uSize = m_QueryBuffer.Size(); for (uIdx = 0; uIdx < uSize; uIdx++) { CString sLine = m_QueryBuffer.GetLine(uIdx, *pClient, msParams); NETWORKMODULECALL(OnPrivBufferPlayLine(*pClient, sLine), m_pUser, this, NULL, continue); pClient->PutClient(sLine); } m_QueryBuffer.Clear(); // Tell them why they won't connect if (!GetIRCConnectEnabled()) pClient->PutStatus("You are currently disconnected from IRC. " "Use 'connect' to reconnect."); }