From f89ae9d15816e69863ef0b26eb78775ee91b7771 Mon Sep 17 00:00:00 2001 From: RealKindOne Date: Tue, 8 Jul 2025 01:35:52 -0400 Subject: [PATCH 1/2] stripcontrols: Use new On...Message events. Added OnTopicMessage and stripping for /list and /topic output. Fixes #1179 --- modules/stripcontrols.cpp | 50 ++++++++++++++++++---------- test/integration/tests/modules.cpp | 52 ++++++++++++++++++++++++++++++ 2 files changed, 85 insertions(+), 17 deletions(-) diff --git a/modules/stripcontrols.cpp b/modules/stripcontrols.cpp index 107111b1..0e784277 100644 --- a/modules/stripcontrols.cpp +++ b/modules/stripcontrols.cpp @@ -20,35 +20,50 @@ class CStripControlsMod : public CModule { public: MODCONSTRUCTOR(CStripControlsMod) {} - EModRet OnPrivCTCP(CNick& Nick, CString& sMessage) override { - sMessage.StripControls(); + EModRet OnChanCTCPMessage(CCTCPMessage& Message) override { + Message.SetText(Message.GetText().StripControls_n()); return CONTINUE; } - EModRet OnChanCTCP(CNick& Nick, CChan& Channel, - CString& sMessage) override { - sMessage.StripControls(); + EModRet OnChanNoticeMessage(CNoticeMessage& Message) override { + Message.SetText(Message.GetText().StripControls_n()); return CONTINUE; } - EModRet OnPrivNotice(CNick& Nick, CString& sMessage) override { - sMessage.StripControls(); + EModRet OnChanTextMessage(CTextMessage& Message) override { + Message.SetText(Message.GetText().StripControls_n()); return CONTINUE; } - EModRet OnChanNotice(CNick& Nick, CChan& Channel, - CString& sMessage) override { - sMessage.StripControls(); + EModRet OnPrivCTCPMessage(CCTCPMessage& Message) override { + Message.SetText(Message.GetText().StripControls_n()); return CONTINUE; } - EModRet OnPrivMsg(CNick& Nick, CString& sMessage) override { - sMessage.StripControls(); + EModRet OnPrivNoticeMessage(CNoticeMessage& Message) override { + Message.SetText(Message.GetText().StripControls_n()); return CONTINUE; } - EModRet OnChanMsg(CNick& Nick, CChan& Channel, CString& sMessage) override { - sMessage.StripControls(); + EModRet OnPrivTextMessage(CTextMessage& Message) override { + Message.SetText(Message.GetText().StripControls_n()); + return CONTINUE; + } + + EModRet OnTopicMessage(CTopicMessage& Message) override { + Message.SetText(Message.GetText().StripControls_n()); + return CONTINUE; + } + + EModRet OnNumericMessage(CNumericMessage& Message) override { + // Strip topic from /list + if (Message.GetCode() == 322) { // RPL_LIST + Message.SetParam(3, Message.GetParam(3).StripControls_n()); + } + // Strip topic when joining channel + else if (Message.GetCode() == 332) { // RPL_TOPIC + Message.SetParam(2, Message.GetParam(2).StripControls_n()); + } return CONTINUE; } }; @@ -59,6 +74,7 @@ void TModInfo(CModInfo& Info) { Info.AddType(CModInfo::UserModule); } -NETWORKMODULEDEFS(CStripControlsMod, - t_s("Strips control codes (Colors, Bold, ..) from channel " - "and private messages.")) +NETWORKMODULEDEFS( + CStripControlsMod, + t_s("Strips control codes (Colors, Bold, ..) from channel " + "and private messages.")) diff --git a/test/integration/tests/modules.cpp b/test/integration/tests/modules.cpp index 929a8e9b..52fe0a59 100644 --- a/test/integration/tests/modules.cpp +++ b/test/integration/tests/modules.cpp @@ -480,5 +480,57 @@ TEST_F(ZNCTest, SaslAuthExternal) { ":irc.znc.in 904 nick :SASL authentication failed"); } +TEST_F(ZNCTest, StripControlsModule) { + auto znc = Run(); + auto ircd = ConnectIRCd(); + auto client = LoginClient(); + + client.Write("znc loadmod stripcontrols"); + client.ReadUntil("Loaded module"); + + ircd.Write(":server 001 nick :Hello"); + client.Write(":nick JOIN #test"); + ircd.ReadUntil("JOIN #test"); + + // OnChanCTCPMessage + ircd.Write(":user!id@host PRIVMSG #test :\001\002bold\002 \003\034red\003 test\001"); + client.ReadUntil(":user!id@host PRIVMSG #test :\001bold red test\001"); + + // OnChanNoticeMessage + ircd.Write(":user!id@host NOTICE #test :\002bold\002 \003\034red\003 test"); + client.ReadUntil(":user!id@host NOTICE #test :bold red test"); + + // OnChanTextMessage + ircd.Write(":user!id@host PRIVMSG #test :\002bold\002 \003\034red\003 test"); + client.ReadUntil(":user!id@host PRIVMSG #test :bold red test"); + + // OnPrivCTCPMessage + ircd.Write(":user!id@host PRIVMSG nick :\001\002bold\002 \003\034red\003 test\001"); + client.ReadUntil(":user!id@host PRIVMSG nick :\001bold red test\001"); + + // OnPrivNoticeMessage + ircd.Write(":user!id@host NOTICE nick :\002bold\002 \003\034red\003 test"); + client.ReadUntil(":user!id@host NOTICE nick :bold red test"); + + // OnPrivTextMessage + ircd.Write(":user!id@host PRIVMSG nick :\002bold\002 \003\034red\003 test"); + client.ReadUntil(":user!id@host PRIVMSG nick :bold red test"); + + // OnTopicMessage + ircd.Write(":user!id@host TOPIC #test :\002bold\002 \003\034red\003 test"); + client.ReadUntil(":user!id@host TOPIC #test :bold red test"); + + // OnNumericMessage + // Topic from joining channel. + ircd.Write("332 nick #test :\002bold\002 \003\034red\003 test"); + client.ReadUntil("332 nick #test :bold red test"); + + // Topic from /list + //ircd.Write("321 nick Channel :Users Name]"); + ircd.Write("322 nick #test 42 :\002bold\002 \003\034red\003 test"); + client.ReadUntil("322 nick #test 42 :bold red test"); + +} + } // namespace } // namespace znc_inttest From d9ee1da873f8a5a53ba8b95c883c0241b8b836cd Mon Sep 17 00:00:00 2001 From: KindOne <20209685+RealKindOne@users.noreply.github.com> Date: Tue, 15 Jul 2025 00:01:31 -0400 Subject: [PATCH 2/2] Fix spacing in StripControls test. --- test/integration/tests/modules.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/integration/tests/modules.cpp b/test/integration/tests/modules.cpp index 52fe0a59..512576b6 100644 --- a/test/integration/tests/modules.cpp +++ b/test/integration/tests/modules.cpp @@ -517,7 +517,7 @@ TEST_F(ZNCTest, StripControlsModule) { client.ReadUntil(":user!id@host PRIVMSG nick :bold red test"); // OnTopicMessage - ircd.Write(":user!id@host TOPIC #test :\002bold\002 \003\034red\003 test"); + ircd.Write(":user!id@host TOPIC #test :\002bold\002 \003\034red\003 test"); client.ReadUntil(":user!id@host TOPIC #test :bold red test"); // OnNumericMessage