X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;ds=sidebyside;f=include%2Fmode.h;h=ccbfe6f28b6ff93af0682db98e7ad05a4853a14a;hb=384ef31bc01e4a1a2e59d082c9066002410ba54a;hp=5cfbe401589df5fcea77dbe9103761e0c15cd7d9;hpb=257bf752fc6b87fa35bfa8cf95fc37730c3d55c6;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/include/mode.h b/include/mode.h index 5cfbe4015..ccbfe6f28 100644 --- a/include/mode.h +++ b/include/mode.h @@ -167,7 +167,7 @@ class CoreExport ModeHandler : public ServiceProvider * @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 @@ -359,6 +359,9 @@ class CoreExport PrefixMode : public ModeHandler */ unsigned int prefixrank; + /** Whether a client with this prefix can remove it from themself. */ + bool selfremove; + public: /** * Constructor @@ -370,6 +373,16 @@ class CoreExport PrefixMode : public ModeHandler */ PrefixMode(Module* Creator, const std::string& Name, char ModeLetter, unsigned int Rank = 0, char PrefixChar = 0); + /** + * Called when a channel mode change access check for your mode occurs. + * @param source Contains the user setting the mode. + * @param channel contains the destination channel the modes are being set on. + * @param parameter The parameter for your mode. This is modifiable. + * @param adding This value is true when the mode is being set, or false when it is being unset. + * @return allow, deny, or passthru to check against the required level + */ + ModResult AccessCheck(User* source, Channel* channel, std::string ¶meter, bool adding) CXX11_OVERRIDE; + /** * Handles setting and unsetting the prefix mode. * Finds the given member of the given channel, if it's not found an error message is sent to 'source' @@ -383,14 +396,29 @@ class CoreExport PrefixMode : public ModeHandler * 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; + + + /** + * Determines whether a user with this prefix mode can remove it. + */ + bool CanSelfRemove() const { return selfremove; } /** * Mode prefix or 0. If this is defined, you should @@ -419,7 +447,7 @@ class CoreExport SimpleUserModeHandler : public ModeHandler 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 @@ -432,7 +460,7 @@ class CoreExport SimpleChannelModeHandler : public ModeHandler 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; }; /** @@ -633,10 +661,6 @@ class CoreExport ModeParser : public fakederef 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.