* InspIRCd -- Internet Relay Chat Daemon
*
* Copyright (C) 2012-2015, 2018 Attila Molnar <attilamolnar@hush.com>
- * Copyright (C) 2012-2013, 2017-2018 Sadie Powell <sadie@witchery.services>
+ * Copyright (C) 2012-2013, 2017-2018, 2020 Sadie Powell <sadie@witchery.services>
* Copyright (C) 2012 Robby <robby@chatbelgie.be>
* Copyright (C) 2009-2010 Daniel De Graaf <danieldg@inspircd.org>
* Copyright (C) 2008 Thomas Stagner <aquanight@inspircd.org>
* Copyright (C) 2007-2008 Robin Burchell <robin+git@viroteck.net>
* Copyright (C) 2007 Dennis Friis <peavey@inspircd.org>
- * Copyright (C) 2006-2010 Craig Edwards <brain@inspircd.org>
+ * Copyright (C) 2003, 2006-2010 Craig Edwards <brain@inspircd.org>
*
* This file is part of InspIRCd. InspIRCd is free software: you can
* redistribute it and/or modify it under the terms of the GNU General Public
/** Retrieves the IRCv3 message tags. */
const ClientProtocol::TagMap& GetTags() const { return tags; }
+ ClientProtocol::TagMap& GetTags() { return tags; }
};
/** Minimum number of parameters command takes
* @param cmd Command name. This must be UPPER CASE.
* @param minpara Minimum parameters required for the command.
* @param maxpara Maximum number of parameters this command may have - extra parameters
- * will be tossed into one last space-seperated param.
+ * will be tossed into one last space-separated param.
*/
CommandBase(Module* me, const std::string& cmd, unsigned int minpara = 0, unsigned int maxpara = 0);
class CoreExport Command : public CommandBase
{
+ protected:
+ /** Initializes a new instance of the Command class.
+ * @param me The module which created this instance.
+ * @param cmd The name of the command.
+ * @param minpara The minimum number of parameters that the command accepts.
+ * @param maxpara The maximum number of parameters that the command accepts.
+ */
+ Command(Module* me, const std::string& cmd, unsigned int minpara = 0, unsigned int maxpara = 0);
+
public:
+ /** Unregisters this command from the command parser. */
+ ~Command() CXX11_OVERRIDE;
+
/** The user modes required to be able to execute this command. */
unsigned char flags_needed;
- /** If true, the command will not be forwarded by the linking module even if it comes via ENCAP.
- * Can be used to forward commands before their effects.
- */
+ /** Whether the command will not be forwarded by the linking module even if it comes via ENCAP. */
bool force_manual_route;
/** The number of seconds worth of penalty that executing this command gives. */
/** Whether the command can be issued before registering. */
bool works_before_reg;
- Command(Module* me, const std::string& cmd, unsigned int minpara = 0, unsigned int maxpara = 0);
-
/** Handle the command from a user.
- * @param parameters The parameters for the command.
* @param user The user who issued the command.
- * @return Return CMD_SUCCESS on success, or CMD_FAILURE on failure.
+ * @param parameters The parameters for the command.
+ * @return Returns CMD_FAILURE on failure, CMD_SUCCESS on success, or CMD_INVALID
+ * if the command was malformed.
*/
virtual CmdResult Handle(User* user, const Params& parameters) = 0;
- /** Register this object in the CommandParser
- */
+ /** Registers this command with the command parser. */
void RegisterService() CXX11_OVERRIDE;
- /** Destructor
- * Removes this command from the command parser
+ /** 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.
*/
- ~Command();
+ virtual void TellNotRegistered(LocalUser* user, const Params& parameters);
};
class CoreExport SplitCommand : public Command
{
+protected:
+ /** Initializes a new instance of the SplitCommand class.
+ * @param me The module which created this instance.
+ * @param cmd The name of the command.
+ * @param minpara The minimum number of parameters that the command accepts.
+ * @param maxpara The maximum number of parameters that the command accepts.
+ */
+ SplitCommand(Module* me, const std::string& cmd, unsigned int minpara = 0, unsigned int maxpara = 0);
+
public:
- SplitCommand(Module* me, const std::string &cmd, unsigned int minpara = 0, unsigned int maxpara = 0)
- : Command(me, cmd, minpara, maxpara) {}
+ /** @copydoc Command::Handle */
CmdResult Handle(User* user, const Params& parameters) CXX11_OVERRIDE;
+
+ /** Handle the command from a local user.
+ * @param user The user who issued the command.
+ * @param parameters The parameters for the command.
+ * @return Returns CMD_FAILURE on failure, CMD_SUCCESS on success, or CMD_INVALID
+ * if the command was malformed.
+ */
virtual CmdResult HandleLocal(LocalUser* user, const Params& parameters);
+
+ /** Handle the command from a remote user.
+ * @param user The user who issued the command.
+ * @param parameters The parameters for the command.
+ * @return Returns CMD_FAILURE on failure, CMD_SUCCESS on success, or CMD_INVALID
+ * if the command was malformed.
+ */
virtual CmdResult HandleRemote(RemoteUser* user, const Params& parameters);
+
+ /** Handle the command from a server user.
+ * @param user The user who issued the command.
+ * @param parameters The parameters for the command.
+ * @return Returns CMD_FAILURE on failure, CMD_SUCCESS on success, or CMD_INVALID
+ * if the command was malformed.
+ */
virtual CmdResult HandleServer(FakeUser* user, const Params& parameters);
};