diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/builtinmodes.h | 4 | ||||
-rw-r--r-- | include/listmode.h | 7 | ||||
-rw-r--r-- | include/mode.h | 18 |
3 files changed, 18 insertions, 11 deletions
diff --git a/include/builtinmodes.h b/include/builtinmodes.h index a4a950922..46bfe282b 100644 --- a/include/builtinmodes.h +++ b/include/builtinmodes.h @@ -52,11 +52,9 @@ class ModeChannelKey : public ModeHandler public: ModeChannelKey(); ModeAction OnModeChange(User* source, User* dest, Channel* channel, std::string ¶meter, bool adding); - void RemoveMode(Channel* channel, irc::modestacker* stack = NULL); void RemoveMode(User* user, irc::modestacker* stack = NULL); }; - /** Channel mode +l */ class ModeChannelLimit : public ParamChannelModeHandler @@ -96,7 +94,6 @@ class ModeChannelOp : public ModeHandler ModeChannelOp(); ModeAction OnModeChange(User* source, User* dest, Channel* channel, std::string ¶meter, bool adding); unsigned int GetPrefixRank(); - void RemoveMode(Channel* channel, irc::modestacker* stack = NULL); void RemoveMode(User* user, irc::modestacker* stack = NULL); }; @@ -140,7 +137,6 @@ class ModeChannelVoice : public ModeHandler ModeAction OnModeChange(User* source, User* dest, Channel* channel, std::string ¶meter, bool adding); unsigned int GetPrefixRank(); void RemoveMode(User* user, irc::modestacker* stack = NULL); - void RemoveMode(Channel* channel, irc::modestacker* stack = NULL); }; /** User mode +i diff --git a/include/listmode.h b/include/listmode.h index 1c6f70d6f..b4601fcbd 100644 --- a/include/listmode.h +++ b/include/listmode.h @@ -144,10 +144,13 @@ class CoreExport ListModeBase : public ModeHandler virtual void DisplayEmptyList(User* user, Channel* channel); /** Remove all instances of the mode from a channel. - * See mode.h + * Populates the given modestack with modes that remove every instance of + * this mode from the channel. + * See mode.h for more details. * @param channel The channel to remove all instances of the mode from + * @param stack The mode stack to add the mode change to */ - virtual void RemoveMode(Channel* channel, irc::modestacker* stack); + virtual void RemoveMode(Channel* channel, irc::modestacker& stack); /** Listmodes don't get set on users, no-op */ diff --git a/include/mode.h b/include/mode.h index b2e06257f..6afd00a86 100644 --- a/include/mode.h +++ b/include/mode.h @@ -100,6 +100,13 @@ enum ParamSpec */ class CoreExport ModeHandler : public ServiceProvider { + /** + * 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 stack The mode stack to add the mode change to + */ + void RemovePrefixMode(Channel* chan, irc::modestacker& stack); + protected: /** * The mode parameter translation type @@ -280,14 +287,15 @@ class CoreExport ModeHandler : public ServiceProvider /** * When a MODETYPE_CHANNEL mode handler is being removed, the server will call this method for every channel on the server. - * Your mode handler should remove its user mode from the channel by sending the appropriate server modes using - * InspIRCd::SendMode(). The default implementation of this method can remove simple modes which have no parameters, - * and can be used when your mode is of this type, otherwise you must implement a more advanced version of it to remove - * your mode properly from each channel. Note that in the case of listmodes, you should remove the entire list of items. + * The mode handler has to populate the given modestacker with mode changes that remove the mode from the channel. + * The default implementation of this method can remove all kinds of channel modes except listmodes. + * In the case of listmodes, the entire list of items must be added to the modestacker (which is handled by ListModeBase, + * so if you inherit from it or your mode can be removed by the default implementation then you do not have to implement + * this function). * @param channel The channel which the server wants to remove your mode from * @param stack The mode stack to add the mode change to */ - virtual void RemoveMode(Channel* channel, irc::modestacker* stack = NULL); + virtual void RemoveMode(Channel* channel, irc::modestacker& stack); inline unsigned int GetLevelRequired() const { return levelrequired; } }; |