+ /** Translation type list for possible parameters, used to tokenize
+ * parameters into UIDs and SIDs etc.
+ */
+ std::vector<TranslateType> translation;
+
+ /** How many seconds worth of penalty does this command have?
+ */
+ const int Penalty;
+
+ /** Create a new command.
+ * @param Instance Pointer to creator class
+ * @param cmd Command name. This must be UPPER CASE.
+ * @param flags User mode required to execute the command. May ONLY be one mode - it's a string to give warnings if people mix params up.
+ * For oper only commands, set this to 'o', otherwise use 0.
+ * @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.
+ * @param before_reg If this is set to true, the command will
+ * be allowed before the user is 'registered' (has sent USER,
+ * NICK, optionally PASS, and been resolved).
+ */
+ Command(InspIRCd* Instance, Module* me, const std::string &cmd, const char *flags, int minpara, bool before_reg = false, int penalty = 1) :
+ ServerInstance(Instance), command(cmd), creator(me), flags_needed(flags ? *flags : 0),
+ min_params(minpara), max_params(0), disabled(false), works_before_reg(before_reg), Penalty(penalty)
+ {
+ use_count = 0;
+ total_bytes = 0;
+ }
+
+ Command(InspIRCd* Instance, Module* me, const std::string &cmd, const char *flags, int minpara, int maxpara, bool before_reg = false, int penalty = 1) :
+ ServerInstance(Instance), command(cmd), creator(me), flags_needed(flags ? *flags : 0),
+ min_params(minpara), max_params(maxpara), disabled(false), works_before_reg(before_reg), Penalty(penalty)
+ {
+ use_count = 0;
+ total_bytes = 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.
+ * If the command succeeds but should remain local to this server,
+ * return CMD_LOCALONLY.
+ */
+ virtual CmdResult Handle(const std::vector<std::string>& parameters, User* user) = 0;
+
+ virtual RouteDescriptor GetRouting(User* user, const std::vector<std::string>& parameters)