mirror of
https://github.com/znc/znc.git
synced 2026-05-03 20:12:29 +02:00
CIRCSock::OnNickMessage() handler
This commit is contained in:
@@ -20,7 +20,6 @@
|
||||
#include <znc/IRCNetwork.h>
|
||||
#include <znc/Server.h>
|
||||
#include <znc/Query.h>
|
||||
#include <znc/Message.h>
|
||||
#include <time.h>
|
||||
|
||||
using std::set;
|
||||
@@ -511,32 +510,7 @@ void CIRCSock::ReadLine(const CString& sData) {
|
||||
|
||||
if (Message.GetType() == CMessage::Type::Nick) {
|
||||
CNickMessage& NickMsg = static_cast<CNickMessage&>(Message);
|
||||
CString sNewNick = NickMsg.GetNewNick();
|
||||
bool bIsVisible = false;
|
||||
|
||||
vector<CChan*> vFoundChans;
|
||||
const vector<CChan*>& vChans = m_pNetwork->GetChans();
|
||||
|
||||
for (CChan* pChan : vChans) {
|
||||
if (pChan->ChangeNick(Nick.GetNick(), sNewNick)) {
|
||||
vFoundChans.push_back(pChan);
|
||||
|
||||
if (!pChan->IsDetached()) {
|
||||
bIsVisible = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (Nick.NickEquals(GetNick())) {
|
||||
// We are changing our own nick, the clients always must see this!
|
||||
bIsVisible = false;
|
||||
SetNick(sNewNick);
|
||||
m_pNetwork->PutUser(Message);
|
||||
}
|
||||
|
||||
IRCSOCKMODULECALL(OnNickMessage(NickMsg, vFoundChans), NOTHING);
|
||||
|
||||
if (!bIsVisible) {
|
||||
if (OnNickMessage(NickMsg)) {
|
||||
return;
|
||||
}
|
||||
} else if (Message.GetType() == CMessage::Type::Quit) {
|
||||
@@ -1085,6 +1059,36 @@ bool CIRCSock::OnChanMsg(CMessage& Message) {
|
||||
return ((pChan) && (pChan->IsDetached()));
|
||||
}
|
||||
|
||||
bool CIRCSock::OnNickMessage(CNickMessage& Message) {
|
||||
const CNick& Nick = Message.GetNick();
|
||||
CString sNewNick = Message.GetNewNick();
|
||||
bool bIsVisible = false;
|
||||
|
||||
vector<CChan*> vFoundChans;
|
||||
const vector<CChan*>& vChans = m_pNetwork->GetChans();
|
||||
|
||||
for (CChan* pChan : vChans) {
|
||||
if (pChan->ChangeNick(Nick.GetNick(), sNewNick)) {
|
||||
vFoundChans.push_back(pChan);
|
||||
|
||||
if (!pChan->IsDetached()) {
|
||||
bIsVisible = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (Nick.NickEquals(GetNick())) {
|
||||
// We are changing our own nick, the clients always must see this!
|
||||
bIsVisible = false;
|
||||
SetNick(sNewNick);
|
||||
m_pNetwork->PutUser(Message);
|
||||
}
|
||||
|
||||
IRCSOCKMODULECALL(OnNickMessage(Message, vFoundChans), NOTHING);
|
||||
|
||||
return !bIsVisible;
|
||||
}
|
||||
|
||||
void CIRCSock::PutIRC(const CString& sLine) {
|
||||
// Only print if the line won't get sent immediately (same condition as in TrySend()!)
|
||||
if (m_bFloodProtection && m_iSendsAllowed <= 0) {
|
||||
|
||||
Reference in New Issue
Block a user