X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;ds=sidebyside;f=include%2Fctables.h;h=1c7d5b4bd5dadd1e45d619323ebab6411b71ca72;hb=ad50225dc3d5ce6e44a5009351a7434b7249d233;hp=43a311a6635e6243759cf644f82dc2ae7662fa13;hpb=124c17e14134a4999afc1a5e981ab7c75b3694b9;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/include/ctables.h b/include/ctables.h index 43a311a66..1c7d5b4bd 100644 --- a/include/ctables.h +++ b/include/ctables.h @@ -110,6 +110,41 @@ struct RouteDescriptor class CoreExport CommandBase : public ServiceProvider { public: + /** Encapsulates parameters to a command. */ + class Params : public std::vector + { + private: + /* IRCv3 message tags. */ + ClientProtocol::TagMap tags; + + public: + /** Initializes a new instance from parameter and tag references. + * @param paramsref Message parameters. + * @param tagsref IRCv3 message tags. + */ + Params(const std::vector& paramsref, const ClientProtocol::TagMap& tagsref) + : std::vector(paramsref) + , tags(tagsref) + { + } + + /** Initializes a new instance from parameter iterators. + * @param first The first element in the parameter array. + * @param last The last element in the parameter array. + */ + template + Params(Iterator first, Iterator last) + : std::vector(first, last) + { + } + + /** Initializes a new empty instance. */ + Params() { } + + /** Retrieves the IRCv3 message tags. */ + const ClientProtocol::TagMap& GetTags() const { return tags; } + }; + /** User flags needed to execute the command or 0 */ unsigned char flags_needed; @@ -128,10 +163,6 @@ class CoreExport CommandBase : public ServiceProvider */ unsigned long use_count; - /** True if the command is disabled to non-opers - */ - bool disabled; - /** True if the command can be issued before registering */ bool works_before_reg; @@ -168,7 +199,7 @@ class CoreExport CommandBase : public ServiceProvider */ CommandBase(Module* me, const std::string& cmd, unsigned int minpara = 0, unsigned int maxpara = 0); - virtual RouteDescriptor GetRouting(User* user, const std::vector& parameters); + virtual RouteDescriptor GetRouting(User* user, const CommandBase::Params& parameters); /** Encode a parameter for server->server transmission. * Used for parameters for which the translation type is TR_CUSTOM. @@ -177,23 +208,6 @@ class CoreExport CommandBase : public ServiceProvider */ virtual void EncodeParameter(std::string& parameter, unsigned int index); - /** Disable or enable this command. - * @param setting True to disable the command. - */ - void Disable(bool setting) - { - disabled = setting; - } - - /** Obtain this command's disable state. - * @return true if the command is currently disabled - * (disabled commands can be used only by operators) - */ - bool IsDisabled() - { - return disabled; - } - /** @return true if the command works before registration. */ bool WorksBeforeReg() @@ -219,7 +233,7 @@ class CoreExport Command : public CommandBase * @param user The user who issued the command. * @return Return CMD_SUCCESS on success, or CMD_FAILURE on failure. */ - virtual CmdResult Handle(const std::vector& parameters, User* user) = 0; + virtual CmdResult Handle(User* user, const Params& parameters) = 0; /** Register this object in the CommandParser */ @@ -236,10 +250,10 @@ class CoreExport SplitCommand : public Command public: SplitCommand(Module* me, const std::string &cmd, unsigned int minpara = 0, unsigned int maxpara = 0) : Command(me, cmd, minpara, maxpara) {} - CmdResult Handle(const std::vector& parameters, User* user) CXX11_OVERRIDE; - virtual CmdResult HandleLocal(const std::vector& parameters, LocalUser* user); - virtual CmdResult HandleRemote(const std::vector& parameters, RemoteUser* user); - virtual CmdResult HandleServer(const std::vector& parameters, FakeUser* user); + CmdResult Handle(User* user, const Params& parameters) CXX11_OVERRIDE; + virtual CmdResult HandleLocal(LocalUser* user, const Params& parameters); + virtual CmdResult HandleRemote(RemoteUser* user, const Params& parameters); + virtual CmdResult HandleServer(FakeUser* user, const Params& parameters); }; /** Shortcut macros for defining translation lists