From 92d83e91038eb54a8200815d5d948c2b61dacce4 Mon Sep 17 00:00:00 2001 From: Sadie Powell Date: Wed, 18 Mar 2020 10:54:37 +0000 Subject: [PATCH] Allow commands to override ERR_{NEEDSMOREPARAMS,NOTREGISTERED}. --- include/ctables.h | 12 ++++++++++++ src/command_parse.cpp | 6 ++---- src/commands.cpp | 11 +++++++++++ 3 files changed, 25 insertions(+), 4 deletions(-) diff --git a/include/ctables.h b/include/ctables.h index a3fcdfbd4..22c0ef67e 100644 --- a/include/ctables.h +++ b/include/ctables.h @@ -236,6 +236,18 @@ class CoreExport Command : public CommandBase /** Registers this command with the command parser. */ void RegisterService() CXX11_OVERRIDE; + + /** Tells the user they did not specify enough parameters. + * @param user The user who issued the command. + * @param parameters The parameters for the command. + */ + virtual void TellNotEnoughParameters(LocalUser* user, const Params& parameters); + + /** Tells the user they need to be registered to execute this command. + * @param user The user who issued the command. + * @param parameters The parameters for the command. + */ + virtual void TellNotRegistered(LocalUser* user, const Params& parameters); }; class CoreExport SplitCommand : public Command diff --git a/src/command_parse.cpp b/src/command_parse.cpp index c4e55c3ca..717431087 100644 --- a/src/command_parse.cpp +++ b/src/command_parse.cpp @@ -283,9 +283,7 @@ void CommandParser::ProcessCommand(LocalUser* user, std::string& command, Comman if (command_p.size() < handler->min_params) { user->CommandFloodPenalty += failpenalty; - user->WriteNumeric(ERR_NEEDMOREPARAMS, command, "Not enough parameters."); - if ((ServerInstance->Config->SyntaxHints) && (user->registered == REG_ALL) && (handler->syntax.length())) - user->WriteNumeric(RPL_SYNTAX, handler->name, handler->syntax); + handler->TellNotEnoughParameters(user, command_p); FOREACH_MOD(OnCommandBlocked, (command, command_p, user)); return; } @@ -293,7 +291,7 @@ void CommandParser::ProcessCommand(LocalUser* user, std::string& command, Comman if ((user->registered != REG_ALL) && (!handler->works_before_reg)) { user->CommandFloodPenalty += failpenalty; - user->WriteNumeric(ERR_NOTREGISTERED, command, "You have not registered"); + handler->TellNotRegistered(user, command_p); FOREACH_MOD(OnCommandBlocked, (command, command_p, user)); } else diff --git a/src/commands.cpp b/src/commands.cpp index 8343cfaac..d1746bc5f 100644 --- a/src/commands.cpp +++ b/src/commands.cpp @@ -66,6 +66,17 @@ void Command::RegisterService() throw ModuleException("Command already exists: " + name); } +void Command::TellNotEnoughParameters(LocalUser* user, const Params& parameters) +{ + user->WriteNumeric(ERR_NEEDMOREPARAMS, name, "Not enough parameters."); + if (ServerInstance->Config->SyntaxHints && user->registered == REG_ALL && syntax.length()) + user->WriteNumeric(RPL_SYNTAX, name, syntax); +} + +void Command::TellNotRegistered(LocalUser* user, const Params& parameters) +{ + user->WriteNumeric(ERR_NOTREGISTERED, name, "You have not registered."); +} SplitCommand::SplitCommand(Module* me, const std::string& cmd, unsigned int minpara, unsigned int maxpara) : Command(me, cmd, minpara, maxpara) -- 2.39.2