From a6c79fa1e1475b86cdb4e2274ba34da316733ed6 Mon Sep 17 00:00:00 2001 From: Jos Ahrens Date: Tue, 4 Oct 2016 00:23:45 +0200 Subject: [PATCH] keepnick: improve behaviour by listening to ircd-side numeric errors (#1324) Fixes #945 --- modules/keepnick.cpp | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/modules/keepnick.cpp b/modules/keepnick.cpp index daa9f225..b25fecd6 100644 --- a/modules/keepnick.cpp +++ b/modules/keepnick.cpp @@ -163,12 +163,20 @@ class CKeepNickMod : public CModule { return CONTINUE; } - EModRet OnRaw(CString& sLine) override { - // Are we trying to get our primary nick and we caused this error? - // :irc.server.net 433 mynick badnick :Nickname is already in use. - if (m_pTimer && sLine.Token(1) == "433" && - sLine.Token(3).Equals(GetNick())) - return HALT; + EModRet OnNumericMessage(CNumericMessage& numeric) override { + if (m_pTimer && + (numeric.GetCode() == 433 || /* bad nick */ + numeric.GetCode() == 435 || /* user is banned on channel (charybdis) */ + numeric.GetCode() == 447)) { /* channel is +N (unrealircd) */ + // Are we trying to get our primary nick and we caused this error? + // :irc.server.net 433 mynick badnick :Nickname is already in use. + if (numeric.GetCode() == 433 && numeric.GetParam(1).Equals(GetNick())) { + return HALT; + } + + PutModule("Unable to obtain nick: " + numeric.GetParam(2) + ": " + numeric.GetParam(3)); + Disable(); + } return CONTINUE; }