diff --git a/modules/nickserv/ns_group.cpp b/modules/nickserv/ns_group.cpp index 6f6469396..83cfd5c0c 100644 --- a/modules/nickserv/ns_group.cpp +++ b/modules/nickserv/ns_group.cpp @@ -268,8 +268,8 @@ public: if (it != oldcore->aliases->end()) oldcore->aliases->erase(it); - if (na->nick.equals_ci(oldcore->display)) - oldcore->SetDisplay(oldcore->aliases->front()); + if (oldcore->na == na) + oldcore->SetDisplay(nullptr); auto *nc = new NickCore(na->nick); na->nc = nc; diff --git a/src/nickalias.cpp b/src/nickalias.cpp index eae218f1e..c0135d1bf 100644 --- a/src/nickalias.cpp +++ b/src/nickalias.cpp @@ -69,8 +69,8 @@ NickAlias::~NickAlias() else { /* Display updating stuff */ - if (this->nick.equals_ci(this->nc->display)) - this->nc->SetDisplay(this->nc->aliases->front()); + if (this->nc->na == this) + this->nc->SetDisplay(nullptr); } } @@ -200,8 +200,8 @@ Serializable *NickAlias::Type::Unserialize(Serializable *obj, Serialize::Data &d if (na->nc->aliases->empty()) delete na->nc; - else if (na->nick.equals_ci(na->nc->display)) - na->nc->SetDisplay(na->nc->aliases->front()); + if (na->nc->na == na) + na->nc->SetDisplay(nullptr); na->nc = core; core->aliases->push_back(na); diff --git a/src/nickcore.cpp b/src/nickcore.cpp index e68c740ee..c915b8436 100644 --- a/src/nickcore.cpp +++ b/src/nickcore.cpp @@ -190,7 +190,17 @@ Serializable *NickCore::Type::Unserialize(Serializable *obj, Serialize::Data &da void NickCore::SetDisplay(NickAlias *na) { - if (na->nc != this || na->nick == this->display) + // If no nick is specified then pick the oldest one. + if (!na) + { + for (auto *alias : *this->aliases) + { + if (!na || alias->registered < na->registered) + na = alias; + } + } + + if (!na || na->nc != this || na->nick == this->display) return; FOREACH_MOD(OnChangeCoreDisplay, (this, na->nick));