bool CIRCSock::OnNickMessage(CNickMessage& Message) { const CNick& Nick = Message.GetNick(); CString sNewNick = Message.GetNewNick(); bool bIsVisible = false; vector<CChan*> vFoundChans; const vector<CChan*>& vChans = m_pNetwork->GetChans(); for (CChan* pChan : vChans) { if (pChan->ChangeNick(Nick.GetNick(), sNewNick)) { vFoundChans.push_back(pChan); if (!pChan->IsDetached()) { bIsVisible = true; } } } if (Nick.NickEquals(GetNick())) { // We are changing our own nick, the clients always must see this! bIsVisible = false; SetNick(sNewNick); m_pNetwork->PutUser(Message); } IRCSOCKMODULECALL(OnNickMessage(Message, vFoundChans), NOTHING); return !bIsVisible; }
void OnNickMessage(CNickMessage& Message, const vector<CChan*>& vChans) override { const CNick& OldNick = Message.GetNick(); const CString sNewNick = Message.GetNewNick(); CString sMsg = OldNick.GetNickMask() + " is now known as " + sNewNick; for (CChan* pChan : vChans) { AddBuffer(*pChan, sMsg, &Message.GetTime(), Message.GetTags()); } }
TEST(MessageTest, Nick) { CNickMessage msg; msg.Parse(":nick NICK person"); EXPECT_EQ("nick", msg.GetNick().GetNick()); EXPECT_EQ("NICK", msg.GetCommand()); EXPECT_EQ("nick", msg.GetOldNick()); EXPECT_EQ("person", msg.GetNewNick()); EXPECT_EQ(CMessage::Type::Nick, msg.GetType()); msg.SetNewNick("test"); EXPECT_EQ("test", msg.GetNewNick()); EXPECT_EQ(":nick NICK test", msg.ToString()); }