diff --git a/include/znc/Message.h b/include/znc/Message.h index 994d33e9..022248ee 100644 --- a/include/znc/Message.h +++ b/include/znc/Message.h @@ -103,6 +103,7 @@ public: class CCTCPMessage : public CTargetMessage { public: + bool IsReply() const { return GetCommand().Equals("NOTICE"); } CString GetText() const { return GetParam(1).TrimPrefix_n("\001").TrimSuffix_n("\001"); } void SetText(const CString& sText) { SetParam(1, "\001" + sText + "\001"); } }; diff --git a/test/MessageTest.cpp b/test/MessageTest.cpp index 31f84203..cbcc3c6b 100644 --- a/test/MessageTest.cpp +++ b/test/MessageTest.cpp @@ -123,6 +123,7 @@ TEST(MessageTest, ChanCTCP) { EXPECT_EQ("PRIVMSG", msg.GetCommand()); EXPECT_EQ("#chan", msg.GetTarget()); EXPECT_EQ("text", msg.GetText()); + EXPECT_FALSE(msg.IsReply()); msg.SetTarget("#znc"); EXPECT_EQ("#znc", msg.GetTarget()); @@ -146,6 +147,22 @@ TEST(MessageTest, ChanMsg) { EXPECT_EQ(":sender PRIVMSG #znc :foo bar", msg.ToString()); } +TEST(MessageTest, CTCPReply) { + CCTCPMessage msg; + msg.Parse(":sender NOTICE nick :\001FOO bar\001"); + EXPECT_EQ("sender", msg.GetNick().GetNick()); + EXPECT_EQ("NOTICE", msg.GetCommand()); + EXPECT_EQ("nick", msg.GetTarget()); + EXPECT_EQ("FOO bar", msg.GetText()); + EXPECT_TRUE(msg.IsReply()); + + msg.SetTarget("noone"); + EXPECT_EQ("noone", msg.GetTarget()); + msg.SetText("BAR foo"); + EXPECT_EQ("BAR foo", msg.GetText()); + EXPECT_EQ(":sender NOTICE noone :\001BAR foo\001", msg.ToString()); +} + TEST(MessageTest, Kick) { CKickMessage msg; msg.Parse(":nick KICK #chan person :reason"); @@ -248,6 +265,7 @@ TEST(MessageTest, PrivCTCP) { EXPECT_EQ("PRIVMSG", msg.GetCommand()); EXPECT_EQ("receiver", msg.GetTarget()); EXPECT_EQ("text", msg.GetText()); + EXPECT_FALSE(msg.IsReply()); msg.SetTarget("noone"); EXPECT_EQ("noone", msg.GetTarget());