]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - include/mode.h
Only subclass Simple{Channel,User}ModeHandler when necessary.
[user/henk/code/inspircd.git] / include / mode.h
index 5cfbe401589df5fcea77dbe9103761e0c15cd7d9..83b8f31be88cb596d6952f1c5fd317eb8ceffb8e 100644 (file)
@@ -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 &parameter, 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'
@@ -385,6 +398,15 @@ class CoreExport PrefixMode : public ModeHandler
         */
        ModeAction OnModeChange(User* source, User* dest, Channel* channel, std::string& param, bool adding);
 
+       /**
+        * 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
@@ -392,6 +414,12 @@ class CoreExport PrefixMode : public ModeHandler
         */
        void RemoveMode(Channel* channel, Modes::ChangeList& changelist);
 
+
+       /**
+       * 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
         * also implement GetPrefixRank() to return an integer