diff --git a/modules/kickrejoin.cpp b/modules/kickrejoin.cpp index 9e2971ce..535aa207 100644 --- a/modules/kickrejoin.cpp +++ b/modules/kickrejoin.cpp @@ -109,15 +109,16 @@ class CRejoinMod : public CModule { PutModule(t_s("Rejoin delay is disabled")); } - void OnKick(const CNick& OpNick, const CString& sKickedNick, CChan& pChan, - const CString& sMessage) override { + void OnKickMessage(CKickMessage& Message) override { + const CString sKickedNick = Message.GetKickedNick(); + CChan& Channel = *Message.GetChan(); if (GetNetwork()->GetCurNick().Equals(sKickedNick)) { if (!delay) { - PutIRC("JOIN " + pChan.GetName() + " " + pChan.GetKey()); - pChan.Enable(); + PutIRC("JOIN " + Channel.GetName() + " " + Channel.GetKey()); + Channel.Enable(); return; } - AddTimer(new CRejoinJob(this, delay, 1, "Rejoin " + pChan.GetName(), + AddTimer(new CRejoinJob(this, delay, 1, "Rejoin " + Channel.GetName(), "Rejoin channel after a delay")); } } diff --git a/test/integration/tests/modules.cpp b/test/integration/tests/modules.cpp index 7dc992c1..1c9eb498 100644 --- a/test/integration/tests/modules.cpp +++ b/test/integration/tests/modules.cpp @@ -911,5 +911,22 @@ TEST_F(ZNCTest, FloodDetachModule) { client.ReadUntil("Channel #test-ctcp was flooded"); } +TEST_F(ZNCTest, KickRejoinModule) { + auto znc = Run(); + auto ircd = ConnectIRCd(); + auto client = LoginClient(); + + client.Write("znc loadmod kickrejoin"); + client.ReadUntil("Loaded module"); + + ircd.Write(":server 001 nick :Hello"); + ircd.Write(":nick JOIN :#test"); + ircd.Write(":server 353 nick = #test :nick @foobar"); + ircd.Write(":server 366 nick #test :End of /NAMES list"); + + ircd.Write(":foobar!user@host KICK #test nick :Kicked!"); + ircd.ReadUntil("JOIN #test"); +} + } // namespace } // namespace znc_inttest