keepnick: improve behaviour by listening to ircd-side numeric errors (#1324)

Fixes #945
This commit is contained in:
Jos Ahrens
2016-10-04 00:23:45 +02:00
committed by Alexey Sokolov
parent b6ffaa6527
commit a6c79fa1e1

View File

@@ -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;
}