aboutsummaryrefslogtreecommitdiffstats
path: root/src/commands.cpp
diff options
context:
space:
mode:
authorGravatar Sadie Powell2026-03-05 04:20:52 +0000
committerGravatar Sadie Powell2026-03-05 04:20:52 +0000
commitfa0e1352faea9419fab094c4da0d6b2cdeb1fc83 (patch)
tree482d75ca32bfd043a96933b1a090fcedccd6467d /src/commands.cpp
parentOnly reset the specific type of reference when adding services. (diff)
Deduplicate command usability checks into Command::IsUsableBy.
Diffstat (limited to 'src/commands.cpp')
-rw-r--r--src/commands.cpp40
1 files changed, 18 insertions, 22 deletions
diff --git a/src/commands.cpp b/src/commands.cpp
index ceb7ab97e..4e1b3a3ad 100644
--- a/src/commands.cpp
+++ b/src/commands.cpp
@@ -122,29 +122,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)
{
@@ -459,6 +439,22 @@ size_t Command::GetMaxTargets()
return this->max_targets;
}
+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->service_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, this->service_name, "Not enough parameters.");