From 58a78e9aa50f0d61cecc42d9833542fe99cbed1d Mon Sep 17 00:00:00 2001 From: Sadie Powell Date: Thu, 29 Aug 2024 13:14:39 +0100 Subject: Allow server admins to require that a display nick drops last. Closes #348. --- modules/nickserv/nickserv.cpp | 3 +++ modules/nickserv/ns_drop.cpp | 6 ++++++ 2 files changed, 9 insertions(+) (limited to 'modules') diff --git a/modules/nickserv/nickserv.cpp b/modules/nickserv/nickserv.cpp index a8ffa51e6..fc02ff50d 100644 --- a/modules/nickserv/nickserv.cpp +++ b/modules/nickserv/nickserv.cpp @@ -536,6 +536,9 @@ public: if (nickserv_expire && Anope::CurTime - na->last_seen >= nickserv_expire) expire = true; + if (na->nc->na == na && na->nc->aliases->size() > 1 && Config->GetModule("nickserv")->Get("preservedisplay")) + expire = false; + FOREACH_MOD(OnPreNickExpire, (na, expire)); if (expire) diff --git a/modules/nickserv/ns_drop.cpp b/modules/nickserv/ns_drop.cpp index c35792060..6042bf326 100644 --- a/modules/nickserv/ns_drop.cpp +++ b/modules/nickserv/ns_drop.cpp @@ -57,6 +57,12 @@ public: return; } + if (na->nc->na == na && na->nc->aliases->size() > 1 && Config->GetModule("nickserv")->Get("preservedisplay") && !source.HasPriv("nickserv/drop/display")) + { + source.Reply(_("You may not drop \002%s\002 as it is the display nick for the account."), na->nick.c_str()); + return; + } + auto *code = dropcode.Get(na); if (params.size() < 2 || ((!code || !code->equals_ci(params[1])) && (!source.HasPriv("nickserv/drop/override") || params[1] != "OVERRIDE"))) { -- cgit