diff options
-rw-r--r-- | src/coremods/core_user/cmd_nick.cpp | 22 | ||||
-rw-r--r-- | src/users.cpp | 26 |
2 files changed, 22 insertions, 26 deletions
diff --git a/src/coremods/core_user/cmd_nick.cpp b/src/coremods/core_user/cmd_nick.cpp index 1b25616dd..a28c40451 100644 --- a/src/coremods/core_user/cmd_nick.cpp +++ b/src/coremods/core_user/cmd_nick.cpp @@ -61,6 +61,28 @@ CmdResult CommandNick::HandleLocal(const std::vector<std::string>& parameters, L return CMD_FAILURE; } + ModResult MOD_RESULT; + FIRST_MOD_RESULT(OnUserPreNick, MOD_RESULT, (user, newnick)); + + // If a module denied the change, abort now + if (MOD_RESULT == MOD_RES_DENY) + return CMD_FAILURE; + + // Disallow the nick change if <security:restrictbannedusers> is on and there is a ban matching this user in + // one of the channels they are on + if (ServerInstance->Config->RestrictBannedUsers) + { + for (UCListIter i = user->chans.begin(); i != user->chans.end(); ++i) + { + Channel* chan = (*i)->chan; + if (chan->GetPrefixValue(user) < VOICE_VALUE && chan->IsBanned(user)) + { + user->WriteNumeric(ERR_CANNOTSENDTOCHAN, "%s :Cannot send to channel (you're banned)", chan->name.c_str()); + return CMD_FAILURE; + } + } + } + if (!user->ChangeNick(newnick, false)) return CMD_FAILURE; diff --git a/src/users.cpp b/src/users.cpp index 75852330f..47dbd2d22 100644 --- a/src/users.cpp +++ b/src/users.cpp @@ -619,32 +619,6 @@ bool User::ChangeNick(const std::string& newnick, bool force, time_t newts) return false; } - LocalUser* const localuser = IS_LOCAL(this); - if (!force && localuser) - { - ModResult MOD_RESULT; - FIRST_MOD_RESULT(OnUserPreNick, MOD_RESULT, (localuser, newnick)); - - // If a module denied the change, abort now - if (MOD_RESULT == MOD_RES_DENY) - return false; - - // Disallow the nick change if <security:restrictbannedusers> is on and there is a ban matching this user in - // one of the channels they are on - if (ServerInstance->Config->RestrictBannedUsers) - { - for (UCListIter i = this->chans.begin(); i != this->chans.end(); ++i) - { - Channel* chan = (*i)->chan; - if (chan->GetPrefixValue(this) < VOICE_VALUE && chan->IsBanned(this)) - { - this->WriteNumeric(ERR_CANNOTSENDTOCHAN, "%s :Cannot send to channel (you're banned)", chan->name.c_str()); - return false; - } - } - } - } - if (assign(newnick) == assign(nick)) { // case change, don't need to check campers |