]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - include/mode.h
Split out ModeParser::ProcessSingle() from Process()
[user/henk/code/inspircd.git] / include / mode.h
index 3877e0d3b3b59edd87d32c2520b43f22e40ca9ff..2833d75a2cd8504c19661ea8c5f02bb9f1e81f6f 100644 (file)
@@ -542,7 +542,7 @@ class CoreExport ModeParser : public fakederef<ModeParser>
        /**
         * Attempts to apply a mode change to a user or channel
         */
-       ModeAction TryMode(User* user, User* targu, Channel* targc, bool adding, unsigned char mode, std::string &param, bool SkipACL);
+       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.
@@ -601,7 +601,15 @@ class CoreExport ModeParser : public fakederef<ModeParser>
                 * and not send it to other servers. The mode change will be processed
                 * locally and sent to local user(s) as usual.
                 */
-               MODE_LOCALONLY = 2
+               MODE_LOCALONLY = 2,
+
+               /** If this flag is set then the mode change will be subject to access checks.
+                * For more information see the documentation of the PrefixMode class,
+                * ModeHandler::levelrequired and ModeHandler::AccessCheck().
+                * Modules may explicitly allow a mode change regardless of this flag by returning
+                * MOD_RES_ALLOW from the OnPreMode hook. Only affects channel mode changes.
+                */
+               MODE_CHECKACCESS = 4
        };
 
        ModeParser();
@@ -672,6 +680,18 @@ class CoreExport ModeParser : public fakederef<ModeParser>
         */
        void Process(const std::vector<std::string>& parameters, User* user, ModeProcessFlag flags = MODE_NONE);
 
+       /** Process a single MODE line's worth of mode changes, taking max modes and line length limits
+        * into consideration.
+        * @param user The source of the mode change, can be a server user.
+        * @param targetchannel Channel to apply the mode change on. NULL if changing modes on a channel.
+        * @param targetuser User to apply the mode change on. NULL if changing modes on a user.
+        * @param changelist Modes to change in form of a Modes::ChangeList. May not process
+        * the entire list due to MODE line length and max modes limitations.
+        * @param flags Optional flags controlling how the mode change is processed,
+        * defaults to MODE_NONE.
+        */
+       void ProcessSingle(User* user, Channel* targetchannel, User* targetuser, Modes::ChangeList& changelist, ModeProcessFlag flags = MODE_NONE);
+
        /** Find the mode handler for a given mode name and type.
         * @param modename The mode name to search for.
         * @param mt Type of mode to search for, user or channel.