* @param mclass The object type of this mode handler, one of ModeHandler::Class
*/
ModeHandler(Module* me, const std::string& name, char modeletter, ParamSpec params, ModeType type, Class mclass = MC_OTHER);
- virtual CullResult cull() CXX11_OVERRIDE;
+ CullResult cull() CXX11_OVERRIDE;
virtual ~ModeHandler();
/** Register this object in the ModeParser
* The latter occurs either when the member cannot be found or when the member already has this prefix set
* (when setting) or doesn't have this prefix set (when unsetting).
*/
- ModeAction OnModeChange(User* source, User* dest, Channel* channel, std::string& param, bool adding);
+ ModeAction OnModeChange(User* source, User* dest, Channel* channel, std::string& param, bool adding) CXX11_OVERRIDE;
+
+ /**
+ * Updates the configuration of this prefix.
+ * @param rank The prefix rank of this mode.
+ * @param setrank The prefix rank required to set this mode on channels.
+ * @param unsetrank The prefix rank required to set this unmode on channels.
+ * @param selfrm Whether a client with this prefix can remove it from themself.
+ */
+ void Update(unsigned int rank, unsigned int setrank, unsigned int unsetrank, bool selfrm);
/**
* Removes this prefix mode from all users on the given channel
* @param channel The channel which the server wants to remove your mode from
* @param changelist Mode change list to populate with the removal of this mode
*/
- void RemoveMode(Channel* channel, Modes::ChangeList& changelist);
+ void RemoveMode(Channel* channel, Modes::ChangeList& changelist) CXX11_OVERRIDE;
/**
public:
SimpleUserModeHandler(Module* Creator, const std::string& Name, char modeletter)
: ModeHandler(Creator, Name, modeletter, PARAM_NONE, MODETYPE_USER) {}
- virtual ModeAction OnModeChange(User* source, User* dest, Channel* channel, std::string ¶meter, bool adding);
+ ModeAction OnModeChange(User* source, User* dest, Channel* channel, std::string& parameter, bool adding) CXX11_OVERRIDE;
};
/** A prebuilt mode handler which handles a simple channel mode, e.g. no parameters, usable by any user, with no extra
public:
SimpleChannelModeHandler(Module* Creator, const std::string& Name, char modeletter)
: ModeHandler(Creator, Name, modeletter, PARAM_NONE, MODETYPE_CHANNEL) {}
- virtual ModeAction OnModeChange(User* source, User* dest, Channel* channel, std::string ¶meter, bool adding);
+ ModeAction OnModeChange(User* source, User* dest, Channel* channel, std::string& parameter, bool adding) CXX11_OVERRIDE;
};
/**
*/
ModeAction TryMode(User* user, User* targu, Channel* targc, Modes::Change& mcitem, bool SkipACL);
- /** Returns a list of user or channel mode characters.
- * Used for constructing the parts of the mode list in the 004 numeric.
- * @param mt Controls whether to list user modes or channel modes
- * @param needparam Return modes only if they require a parameter to be set
- * @return The available mode letters that satisfy the given conditions
- */
- std::string CreateModeList(ModeType mt, bool needparam = false);
-
- /** Recreate the cached mode list that is displayed in the 004 numeric
- * in Cached004ModeList.
- * Called when a mode handler is added or removed.
- */
- void RecreateModeListFor004Numeric();
-
/** Allocates an unused id for the given mode type, throws a ModuleException if out of ids.
* @param mt The type of the mode to allocate the id for
* @return The id
*/
ModeHandler::Id AllocateModeId(ModeType mt);
- /** The string representing the last set of modes to be parsed.
- * Use GetLastParse() to get this value, to be used for display purposes.
- */
- std::string LastParse;
-
- /** Cached mode list for use in 004 numeric
- */
- TR1NS::array<std::string, 3> Cached004ModeList;
-
public:
typedef std::vector<ListModeBase*> ListModeList;
typedef std::vector<PrefixMode*> PrefixModeList;
ModeParser();
~ModeParser();
- /** Initialize all built-in modes
- */
- static void InitBuiltinModes();
-
static bool IsModeChar(char chr);
/** Tidy a banmask. This makes a banmask 'acceptable' if fields are left out.
* This method can be used on both IPV4 and IPV6 user masks.
*/
static void CleanMask(std::string &mask);
- /** Get the last string to be processed, as it was sent to the user or channel.
- * Use this to display a string you just sent to be parsed, as the actual output
- * may be different to what you sent after it has been 'cleaned up' by the parser.
- * @return Last parsed string, as seen by users.
- */
- const std::string& GetLastParse() const { return LastParse; }
+
+ /** Gets the last mode change to be processed. */
+ const Modes::ChangeList& GetLastChangeList() const { return LastChangeList; }
/** Add a mode to the mode parser.
* Throws a ModuleException if the mode cannot be added.
*/
PrefixMode* FindPrefix(unsigned const char pfxletter);
- /** Returns an array of modes:
- * 1. User modes
- * 2. Channel modes
- * 3. Channel modes that require a parameter when set
- * This is sent to users as the last part of the 004 numeric
- */
- const TR1NS::array<std::string, 3>& GetModeListFor004Numeric();
-
/** Generates a list of modes, comma seperated by type:
* 1; Listmodes EXCEPT those with a prefix
* 2; Modes that take a param when adding or removing
void ShowListModeList(User* user, Channel* chan, ModeHandler* mh);
};
-inline const TR1NS::array<std::string, 3>& ModeParser::GetModeListFor004Numeric()
-{
- return Cached004ModeList;
-}
-
inline PrefixMode* ModeHandler::IsPrefixMode()
{
return (this->type_id == MC_PREFIX ? static_cast<PrefixMode*>(this) : NULL);