From ae03e3c32bc77fc6903209083c88698fe291e279 Mon Sep 17 00:00:00 2001 From: Sadie Powell Date: Thu, 5 Mar 2026 04:20:52 +0000 Subject: Deduplicate command usability checks into Command::IsUsableBy. --- src/commands.cpp | 40 ++++++++++++++++++---------------------- 1 file changed, 18 insertions(+), 22 deletions(-) (limited to 'src/commands.cpp') diff --git a/src/commands.cpp b/src/commands.cpp index bb0648539..ac1219a24 100644 --- a/src/commands.cpp +++ b/src/commands.cpp @@ -114,29 +114,9 @@ CmdResult CommandParser::CallHandler(const std::string& commandname, const Comma if (parameters.size() >= handler->min_params) { - bool bOkay = false; + bool bOkay = true; if (IS_LOCAL(user)) - { - switch (handler->access_needed) - { - case CmdAccess::NORMAL: // Anyone can execute. - bOkay = true; - break; - - case CmdAccess::OPERATOR: // Only opers can execute. - bOkay = user->HasCommandPermission(commandname); - break; - - case CmdAccess::SERVER: // Only servers can execute. - bOkay = IS_SERVER(user); - break; - } - } - else - { - /* remote or no flags required anyway */ - bOkay = true; - } + bOkay = handler->IsUsableBy(user); if (bOkay) { @@ -440,6 +420,22 @@ void Command::RegisterService() throw ModuleException(creator, "Command already exists: " + name); } +bool Command::IsUsableBy(User *user) const +{ + switch (this->access_needed) + { + case CmdAccess::NORMAL: // Everyone can use user commands. + return true; + + case CmdAccess::OPERATOR: // Only opers can use oper commands. + return user->HasCommandPermission(this->name); + + case CmdAccess::SERVER: // Nobody can use server commands. + return false; + } + return true; // Should never happen. +} + void Command::TellNotEnoughParameters(LocalUser* user, const Params& parameters) { user->WriteNumeric(ERR_NEEDMOREPARAMS, name, "Not enough parameters."); -- cgit v1.3.1-10-gc9f91