diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/modules/m_spanningtree/main.cpp | 7 | ||||
-rw-r--r-- | src/modules/m_spanningtree/nick.cpp | 6 | ||||
-rw-r--r-- | src/modules/m_spanningtree/svsnick.cpp | 3 | ||||
-rw-r--r-- | src/users.cpp | 5 |
4 files changed, 9 insertions, 12 deletions
diff --git a/src/modules/m_spanningtree/main.cpp b/src/modules/m_spanningtree/main.cpp index 1782f7e2a..43a3ec2cc 100644 --- a/src/modules/m_spanningtree/main.cpp +++ b/src/modules/m_spanningtree/main.cpp @@ -583,14 +583,9 @@ void ModuleSpanningTree::OnUserPostNick(User* user, const std::string &oldnick) { if (IS_LOCAL(user)) { + // The nick TS is updated by the core, we don't do it CmdBuilder params(user, "NICK"); params.push_back(user->nick); - - /** IMPORTANT: We don't update the TS if the oldnick is just a case change of the newnick! - */ - if ((irc::string(user->nick.c_str()) != assign(oldnick)) && (!this->KeepNickTS)) - user->age = ServerInstance->Time(); - params.push_back(ConvToStr(user->age)); params.Broadcast(); this->KeepNickTS = false; diff --git a/src/modules/m_spanningtree/nick.cpp b/src/modules/m_spanningtree/nick.cpp index eb6c9396f..49ce9a767 100644 --- a/src/modules/m_spanningtree/nick.cpp +++ b/src/modules/m_spanningtree/nick.cpp @@ -36,7 +36,7 @@ CmdResult CommandNick::HandleRemote(RemoteUser* user, std::vector<std::string>& return CMD_INVALID; /* Update timestamp on user when they change nicks */ - user->age = ConvToInt(params[1]); + const time_t newts = ConvToInt(params[1]); /* * On nick messages, check that the nick doesn't already exist here. @@ -46,7 +46,7 @@ CmdResult CommandNick::HandleRemote(RemoteUser* user, std::vector<std::string>& if ((x) && (x != user)) { /* x is local, who is remote */ - int collideret = Utils->DoCollision(x, TreeServer::Get(user), user->age, user->ident, user->GetIPString(), user->uuid); + int collideret = Utils->DoCollision(x, TreeServer::Get(user), newts, user->ident, user->GetIPString(), user->uuid); if (collideret != 1) { /* @@ -57,6 +57,6 @@ CmdResult CommandNick::HandleRemote(RemoteUser* user, std::vector<std::string>& return CMD_FAILURE; } } - user->ForceNickChange(params[0]); + user->ForceNickChange(params[0], newts); return CMD_SUCCESS; } diff --git a/src/modules/m_spanningtree/svsnick.cpp b/src/modules/m_spanningtree/svsnick.cpp index b3480eb55..01b83dc2c 100644 --- a/src/modules/m_spanningtree/svsnick.cpp +++ b/src/modules/m_spanningtree/svsnick.cpp @@ -43,9 +43,8 @@ CmdResult CommandSVSNick::Handle(User* user, std::vector<std::string>& parameter ModuleSpanningTree* st = (ModuleSpanningTree*)(Module*)creator; st->KeepNickTS = true; - u->age = NickTS; - if (!u->ForceNickChange(nick)) + if (!u->ForceNickChange(nick, NickTS)) { /* buh. UID them */ if (!u->ForceNickChange(u->uuid)) diff --git a/src/users.cpp b/src/users.cpp index a5737c9ce..cf1887ce9 100644 --- a/src/users.cpp +++ b/src/users.cpp @@ -613,7 +613,7 @@ void User::InvalidateCache() cached_fullrealhost.clear(); } -bool User::ChangeNick(const std::string& newnick, bool force) +bool User::ChangeNick(const std::string& newnick, bool force, time_t newts) { if (quitting) { @@ -637,6 +637,7 @@ bool User::ChangeNick(const std::string& newnick, bool force) { // case change, don't need to check Q:lines and such // and, if it's identical including case, we can leave right now + // We also don't update the nick TS if it's a case change, either if (newnick == nick) return true; } @@ -710,6 +711,8 @@ bool User::ChangeNick(const std::string& newnick, bool force) return false; } } + + age = newts ? newts : ServerInstance->Time(); } if (this->registered == REG_ALL) |