From 465b9fff0b117a6ca79534ae2070768c3997a17e Mon Sep 17 00:00:00 2001 From: Tomatix Date: Tue, 17 Nov 2020 20:11:55 +0100 Subject: [PATCH] Implemented use of alternative nickname. --- IRCClient/IRCBase.cpp | 7 +++++-- IdealIRC/IRC.cpp | 11 +++++++++++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/IRCClient/IRCBase.cpp b/IRCClient/IRCBase.cpp index 647e9d4..eea8618 100644 --- a/IRCClient/IRCBase.cpp +++ b/IRCClient/IRCBase.cpp @@ -637,8 +637,11 @@ const std::string& IRCBase::getNickname() const void IRCBase::setNickname(const std::string& nickname) { - if (mp->isConnected) - mp->write(Command::IRC::NICK, nickname); + if (mp->isConnected) { + if (!isOnline()) + mp->nickname = nickname; + mp->write(Command::IRC::NICK, nickname); + } else mp->nickname = nickname; } diff --git a/IdealIRC/IRC.cpp b/IdealIRC/IRC.cpp index 7d8d82d..6a3bee6 100644 --- a/IdealIRC/IRC.cpp +++ b/IdealIRC/IRC.cpp @@ -586,6 +586,17 @@ void IRC::onMsgNumeric(const IRCPrefix& /*sender*/, const std::string& num, cons } } + if (num == Numeric::ERR_NICKNAMEINUSE && !isOnline()) { + auto& conf = ConfigMgr::instance(); + auto altNick = conf.connection("AltNickname"); + if (!altNick.isEmpty() && altNick.toStdString() != getNickname()) { + setNickname(altNick.toStdString()); + } + else { + getStatus().getInputBox().setText("/NICK "); + } + } + /* Script event */ { ScriptArray pval;