cached_fullrealhost.clear();
}
-bool User::ChangeNick(const std::string& newnick, bool force, time_t newts)
+bool User::ChangeNick(const std::string& newnick, time_t newts)
{
if (quitting)
{
return false;
}
- if (assign(newnick) == assign(nick))
+ User* const InUse = ServerInstance->FindNickOnly(newnick);
+ if (InUse == this)
{
// case change, don't need to check campers
// and, if it's identical including case, we can leave right now
* If the guy using the nick is already using it, tell the incoming nick change to gtfo,
* because the nick is already (rightfully) in use. -- w00t
*/
- User* InUse = ServerInstance->FindNickOnly(newnick);
- if (InUse && (InUse != this))
+ if (InUse)
{
if (InUse->registered != REG_ALL)
{
InUse->WriteFrom(InUse, "NICK %s", InUse->uuid.c_str());
InUse->WriteNumeric(ERR_NICKNAMEINUSE, "%s :Nickname overruled.", InUse->nick.c_str());
- ServerInstance->Users->clientlist.erase(InUse->nick);
- ServerInstance->Users->clientlist[InUse->uuid] = InUse;
-
- InUse->nick = InUse->uuid;
- InUse->InvalidateCache();
InUse->registered &= ~REG_NICK;
+ InUse->ChangeNick(InUse->uuid);
}
else
{