From 30bb92fec35c411ed7e0e8176f51fd5925ab0fcf Mon Sep 17 00:00:00 2001 From: J-P Nurmi Date: Sat, 5 Sep 2015 02:10:46 +0200 Subject: [PATCH] CIRCSock::OnNoticeMessage() handler --- include/znc/IRCSock.h | 3 +- src/IRCSock.cpp | 77 +++++++++++++++++++------------------------ 2 files changed, 34 insertions(+), 46 deletions(-) diff --git a/include/znc/IRCSock.h b/include/znc/IRCSock.h index cd0cc522..a37a2609 100644 --- a/include/znc/IRCSock.h +++ b/include/znc/IRCSock.h @@ -55,11 +55,10 @@ public: bool OnGeneralCTCP(CMessage& Message); bool OnPrivMsg(CMessage& Message); bool OnChanMsg(CMessage& Message); - bool OnPrivNotice(CMessage& Message); - bool OnChanNotice(CMessage& Message); bool OnJoinMessage(CJoinMessage& Message); bool OnKickMessage(CKickMessage& Message); bool OnNickMessage(CNickMessage& Message); + bool OnNoticeMessage(CNoticeMessage& Message); bool OnPartMessage(CPartMessage& Message); bool OnQuitMessage(CQuitMessage& Message); bool OnTopicMessage(CTopicMessage& Message); diff --git a/src/IRCSock.cpp b/src/IRCSock.cpp index b3a48783..426de5c1 100644 --- a/src/IRCSock.cpp +++ b/src/IRCSock.cpp @@ -568,17 +568,8 @@ void CIRCSock::ReadLine(const CString& sData) { } } else if (Message.GetType() == CMessage::Type::Notice) { CNoticeMessage& NoticeMsg = static_cast(Message); - // :nick!ident@host.com NOTICE #chan :Message - CString sTarget = NoticeMsg.GetTarget(); - - if (sTarget.Equals(GetNick())) { - if (OnPrivNotice(Message)) { - return; - } - } else { - if (OnChanNotice(Message)) { - return; - } + if (OnNoticeMessage(NoticeMsg)) { + return; } } else if (Message.GetType() == CMessage::Type::Topic) { CTopicMessage& TopicMsg = static_cast(Message); @@ -821,20 +812,6 @@ bool CIRCSock::OnGeneralCTCP(CMessage& Message) { return false; } -bool CIRCSock::OnPrivNotice(CMessage& Message) { - CNoticeMessage& Notice = static_cast(Message); - bool bResult = false; - IRCSOCKMODULECALL(OnPrivNoticeMessage(Notice), &bResult); - if (bResult) return true; - - if (!m_pNetwork->IsUserOnline()) { - // If the user is detached, add to the buffer - m_pNetwork->AddNoticeBuffer(":" + _NAMEDFMT(Notice.GetNick().GetNickMask()) + " NOTICE {target} :{text}", Notice.GetText()); - } - - return false; -} - bool CIRCSock::OnPrivMsg(CMessage& Message) { CTextMessage& PrivMsg = static_cast(Message); bool bResult = false; @@ -901,25 +878,6 @@ bool CIRCSock::OnChanCTCP(CMessage& Message) { return (pChan && pChan->IsDetached()); } -bool CIRCSock::OnChanNotice(CMessage& Message) { - CNoticeMessage& Notice = static_cast(Message); - CChan* pChan = m_pNetwork->FindChan(Notice.GetParam(0)); - if (pChan) { - FixupChanNick(Message.GetNick(), pChan); - - bool bResult = false; - Notice.SetChan(pChan); - IRCSOCKMODULECALL(OnChanNoticeMessage(Notice), &bResult); - if (bResult) return true; - - if (!pChan->AutoClearChanBuffer() || !m_pNetwork->IsUserOnline() || pChan->IsDetached()) { - pChan->AddBuffer(":" + _NAMEDFMT(Notice.GetNick().GetNickMask()) + " NOTICE " + _NAMEDFMT(pChan->GetName()) + " :{text}", Notice.GetText(), &Notice.GetTime(), Notice.GetTags()); - } - } - - return ((pChan) && (pChan->IsDetached())); -} - bool CIRCSock::OnChanMsg(CMessage& Message) { CTextMessage& ChanMsg = static_cast(Message); CChan* pChan = m_pNetwork->FindChan(ChanMsg.GetParam(0)); @@ -1037,6 +995,37 @@ bool CIRCSock::OnNickMessage(CNickMessage& Message) { return !bIsVisible; } +bool CIRCSock::OnNoticeMessage(CNoticeMessage& Message) { + CString sTarget = Message.GetTarget(); + bool bResult = false; + + if (sTarget.Equals(GetNick())) { + IRCSOCKMODULECALL(OnPrivNoticeMessage(Message), &bResult); + if (bResult) return true; + + if (!m_pNetwork->IsUserOnline()) { + // If the user is detached, add to the buffer + m_pNetwork->AddNoticeBuffer(":" + _NAMEDFMT(Message.GetNick().GetNickMask()) + " NOTICE {target} :{text}", Message.GetText()); + } + + return false; + } else { + CChan* pChan = m_pNetwork->FindChan(sTarget); + if (pChan) { + Message.SetChan(pChan); + FixupChanNick(Message.GetNick(), pChan); + IRCSOCKMODULECALL(OnChanNoticeMessage(Message), &bResult); + if (bResult) return true; + + if (!pChan->AutoClearChanBuffer() || !m_pNetwork->IsUserOnline() || pChan->IsDetached()) { + pChan->AddBuffer(":" + _NAMEDFMT(Message.GetNick().GetNickMask()) + " NOTICE " + _NAMEDFMT(pChan->GetName()) + " :{text}", Message.GetText(), &Message.GetTime(), Message.GetTags()); + } + } + + return (pChan && pChan->IsDetached()); + } +} + bool CIRCSock::OnPartMessage(CPartMessage& Message) { const CNick& Nick = Message.GetNick(); CString sChan = Message.GetTarget();