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..512576b6 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