diff --git a/src/Client.cpp b/src/Client.cpp index 66f39cc6..f279d81c 100644 --- a/src/Client.cpp +++ b/src/Client.cpp @@ -1175,6 +1175,11 @@ bool CClient::OnActionMessage(CActionMessage& Message) { this, &bContinue); if (bContinue) continue; + if (sTarget.TrimPrefix(m_pUser->GetStatusPrefix())) { + EchoMessage(Message); + continue; + } + if (m_pNetwork) { AddBuffer(Message); EchoMessage(Message); @@ -1385,6 +1390,10 @@ bool CClient::OnCTCPMessage(CCTCPMessage& Message) { } if (bContinue) continue; + if (sTarget.TrimPrefix(m_pUser->GetStatusPrefix())) { + continue; + } + if (!GetIRCSock()) { // Some lagmeters do a NOTICE to their own nick, ignore those. if (!sTarget.Equals(m_sNick)) @@ -1610,16 +1619,16 @@ bool CClient::OnTagMessage(CTargetMessage& Message) { Message.SetChan(m_pNetwork->FindChan(sTarget)); } - if (sTarget.TrimPrefix(m_pUser->GetStatusPrefix())) { - EchoMessage(Message); - continue; - } - bool bContinue = false; NETWORKMODULECALL(OnUserTagMessage(Message), m_pUser, m_pNetwork, this, &bContinue); if (bContinue) continue; + if (sTarget.TrimPrefix(m_pUser->GetStatusPrefix())) { + EchoMessage(Message); + continue; + } + if (m_pNetwork) { AddBuffer(Message); EchoMessage(Message); diff --git a/test/integration/tests/core.cpp b/test/integration/tests/core.cpp index c8a34412..f1a0768e 100644 --- a/test/integration/tests/core.cpp +++ b/test/integration/tests/core.cpp @@ -1029,5 +1029,16 @@ TEST_F(ZNCTest, TagMsg) { client.ReadUntil("@bar TAGMSG #bar"); } +TEST_F(ZNCTest, StatusAction) { + auto znc = Run(); + auto ircd = ConnectIRCd(); + auto client = LoginClient(); + ircd.Write("001 nick Welcome"); + + client.Write("PRIVMSG *status :\1ACTION waves\1"); + client.Write("PRIVMSG *status :\1VERSION\1"); + ASSERT_THAT(ircd.ReadRemainder().toStdString(), Not(HasSubstr("PRIVMSG"))); +} + } // namespace } // namespace znc_inttest