diff --git a/modules/keepnick.cpp b/modules/keepnick.cpp index 5f9fb201..5d6afa7d 100644 --- a/modules/keepnick.cpp +++ b/modules/keepnick.cpp @@ -80,8 +80,9 @@ class CKeepNickMod : public CModule { return sConfNick; } - void OnNick(const CNick& Nick, const CString& sNewNick, - const vector& vChans) override { + void OnNickMessage(CNickMessage& Message, const vector& vChans) override { + const CNick& Nick = Message.GetNick(); + const CString& sNewNick = Message.GetNewNick(); if (sNewNick == GetNetwork()->GetIRCSock()->GetNick()) { // We are changing our own nick if (Nick.NickEquals(GetNick())) { @@ -103,14 +104,15 @@ class CKeepNickMod : public CModule { } } - void OnQuit(const CNick& Nick, const CString& sMessage, - const vector& vChans) override { + void OnQuitMessage(CQuitMessage& Message, const vector& vChans) override { // If someone with the nick we want quits, be fast and get the nick + const CNick& Nick = Message.GetNick(); if (Nick.NickEquals(GetNick())) { KeepNick(); } } + void OnIRCDisconnected() override { // No way we can do something if we aren't connected to IRC. Disable(); diff --git a/test/integration/tests/modules.cpp b/test/integration/tests/modules.cpp index 5a71682b..7dc992c1 100644 --- a/test/integration/tests/modules.cpp +++ b/test/integration/tests/modules.cpp @@ -336,6 +336,31 @@ TEST_F(ZNCTest, KeepNickModule) { client.ReadUntil( ":*keepnick!keepnick@znc.in PRIVMSG user_ " ":Unable to obtain nick user: Nope :-P, #error"); + + client.Write("PRIVMSG *keepnick :state"); + client.ReadUntil("Currently disabled"); + + client.Write("NICK user_"); + ircd.ReadUntil("NICK user_"); + client.Write("JOIN #test"); + ircd.ReadUntil("JOIN #test"); + ircd.Write(":server 353 nick = #test :user_ user"); + ircd.Write(":server 366 nick #test :End of /NAMES list"); + + client.Write("PRIVMSG *keepnick :enable"); + client.ReadUntil("Trying to get"); + + // OnQuitMessage + ircd.Write(":user QUIT :Leaving"); + ircd.ReadUntil("NICK user"); + + // OnNickMessage + client.Write("NICK test"); + ircd.ReadUntil("NICK test"); + ircd.Write(":user!ident@host JOIN #test"); + client.ReadUntil("JOIN"); + ircd.Write(":user!ident@host NICK user2"); + ircd.ReadUntil("NICK user"); } TEST_F(ZNCTest, ModuleCSRFOverride) {