]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - include/modules.h
Remove redundant ServerInstance* fields
[user/henk/code/inspircd.git] / include / modules.h
index 89de183b725cabf96b5406824cb408ed9a8a0799..4e960ec6457bcae36e5ddd4f7c4152695fd3e77e 100644 (file)
 
 class XLine;
 
-/** Used with OnAccessCheck() method of modules
- */
-enum AccessControlType {
-       ACR_DEFAULT,            // Do default action (act as if the module isnt even loaded)
-       ACR_DENY,               // deny the action
-       ACR_ALLOW,              // allow the action
-       AC_KICK,                // a user is being kicked
-       AC_DEOP,                // a user is being deopped
-       AC_OP,                  // a user is being opped
-       AC_VOICE,               // a user is being voiced
-       AC_DEVOICE,             // a user is being devoiced
-       AC_HALFOP,              // a user is being halfopped
-       AC_DEHALFOP,            // a user is being dehalfopped
-       AC_INVITE,              // a user is being invited
-       AC_GENERAL_MODE,        // a channel mode is being changed
-       AC_GENERAL_UMODE        // a user mode is being changed
-};
-
 /** Used to define a set of behavior bits for a module
  */
 enum ModuleFlags {
@@ -419,7 +401,7 @@ enum Implementation
        I_OnUserMessage, I_OnUserNotice, I_OnMode, I_OnGetServerDescription, I_OnSyncUser,
        I_OnSyncChannel, I_OnDecodeMetaData, I_OnWallops,
        I_OnChangeHost, I_OnChangeName, I_OnAddLine, I_OnDelLine, I_OnExpireLine, I_OnCleanup,
-       I_OnUserPostNick, I_OnAccessCheck, I_On005Numeric, I_OnKill, I_OnRemoteKill, I_OnLoadModule,
+       I_OnUserPostNick, I_OnPreMode, I_On005Numeric, I_OnKill, I_OnRemoteKill, I_OnLoadModule,
        I_OnUnloadModule, I_OnBackgroundTimer, I_OnPreCommand, I_OnCheckReady, I_OnCheckInvite,
        I_OnRawMode, I_OnCheckKey, I_OnCheckLimit, I_OnCheckBan, I_OnCheckExtBan, I_OnCheckStringExtBan,
        I_OnStats, I_OnChangeLocalUserHost, I_OnChangeLocalUserGecos, I_OnPreTopicChange,
@@ -443,9 +425,6 @@ class ConfigReader;
 class CoreExport Module : public Extensible
 {
  public:
-       /** Creator/owner pointer
-        */
-       InspIRCd* ServerInstance;
        /** File that this module was loaded from
         */
        std::string ModuleSourceFile;
@@ -510,34 +489,27 @@ class CoreExport Module : public Extensible
        /** Called when a user joins a channel.
         * The details of the joining user are available to you in the parameter User *user,
         * and the details of the channel they have joined is available in the variable Channel *channel
-        * @param user The user who is joining
-        * @param channel The channel being joined
-        * @param silent Change this to true if you want to conceal the JOIN command from the other users
-        * of the channel (useful for modules such as auditorium)
+        * @param memb The channel membership being created
         * @param sync This is set to true if the JOIN is the result of a network sync and the remote user is being introduced
         * to a channel due to the network sync.
         * @param created This is true if the join created the channel
         */
-       virtual void OnUserJoin(User* user, Channel* channel, bool sync, bool &silent, bool created);
+       virtual void OnUserJoin(Membership* memb, bool sync, bool created, CUList& except_list);
 
        /** Called after a user joins a channel
         * Identical to OnUserJoin, but called immediately afterwards, when any linking module has
         * seen the join.
-        * @param user The user who is joining
-        * @param channel The channel being joined
+        * @param memb The channel membership created
         */
-       virtual void OnPostJoin(User* user, Channel* channel);
+       virtual void OnPostJoin(Membership*);
 
        /** Called when a user parts a channel.
         * The details of the leaving user are available to you in the parameter User *user,
         * and the details of the channel they have left is available in the variable Channel *channel
-        * @param user The user who is parting
-        * @param channel The channel being parted
+        * @param memb The channel membership being destroyed
         * @param partmessage The part message, or an empty string (may be modified)
-        * @param silent Change this to true if you want to conceal the PART command from the other users
-        * of the channel (useful for modules such as auditorium)
         */
-       virtual void OnUserPart(User* user, Channel* channel, std::string &partmessage, bool &silent);
+       virtual void OnUserPart(Membership* memb, std::string &partmessage, CUList& except_list);
 
        /** Called on rehash.
         * This method is called prior to a /REHASH or when a SIGHUP is received from the operating
@@ -593,7 +565,7 @@ class CoreExport Module : public Extensible
         * @param user The user joining the channel
         * @param chan If the  channel is a new channel, this will be NULL, otherwise it will be a pointer to the channel being joined
         * @param cname The channel name being joined. For new channels this is valid where chan is not.
-        * @param privs A string containing the users privilages when joining the channel. For new channels this will contain "@".
+        * @param privs A string containing the users privilages when joining the channel. For new channels this will contain "o".
         * You may alter this string to alter the user's modes on the channel.
         * @param keygiven The key given to join the channel, or an empty string if none was provided
         * @return 1 To prevent the join, 0 to allow it.
@@ -610,7 +582,7 @@ class CoreExport Module : public Extensible
         * @param reason The kick reason
         * @return 1 to prevent the kick, 0 to continue normally, -1 to explicitly allow the kick regardless of normal operation
         */
-       virtual ModResult OnUserPreKick(User* source, User* user, Channel* chan, const std::string &reason);
+       virtual ModResult OnUserPreKick(User* source, Membership* memb, const std::string &reason);
 
        /** Called whenever a user is kicked.
         * If this method is called, the kick is already underway and cannot be prevented, so
@@ -619,10 +591,8 @@ class CoreExport Module : public Extensible
         * @param user The user being kicked
         * @param chan The channel the user is being kicked from
         * @param reason The kick reason
-        * @param silent Change this to true if you want to conceal the PART command from the other users
-        * of the channel (useful for modules such as auditorium)
         */
-       virtual void OnUserKick(User* source, User* user, Channel* chan, const std::string &reason, bool &silent);
+       virtual void OnUserKick(User* source, Membership* memb, const std::string &reason, CUList& except_list);
 
        /** Called whenever a user opers locally.
         * The User will contain the oper mode 'o' as this function is called after any modifications
@@ -963,32 +933,18 @@ class CoreExport Module : public Extensible
         */
        virtual void OnUserPostNick(User* user, const std::string &oldnick);
 
-       /** Called before an action which requires a channel privilage check.
-        * This function is called before many functions which check a users status on a channel, for example
-        * before opping a user, deopping a user, kicking a user, etc.
-        * There are several values for access_type which indicate for what reason access is being checked.
-        * These are:<br><br>
-        * AC_KICK - A user is being kicked<br>
-        * AC_DEOP - a user is being deopped<br>
-        * AC_OP - a user is being opped<br>
-        * AC_VOICE - a user is being voiced<br>
-        * AC_DEVOICE - a user is being devoiced<br>
-        * AC_HALFOP - a user is being halfopped<br>
-        * AC_DEHALFOP - a user is being dehalfopped<br>
-        * AC_INVITE - a user is being invited<br>
-        * AC_GENERAL_MODE - a user channel mode is being changed<br><br>
-        * Upon returning from your function you must return either ACR_DEFAULT, to indicate the module wishes
-        * to do nothing, or ACR_DENY where approprate to deny the action, and ACR_ALLOW where appropriate to allow
-        * the action. Please note that in the case of some access checks (such as AC_GENERAL_MODE) access may be
-        * denied 'upstream' causing other checks such as AC_DEOP to not be reached. Be very careful with use of the
-        * AC_GENERAL_MODE type, as it may inadvertently override the behaviour of other modules. When the access_type
-        * is AC_GENERAL_MODE, the destination of the mode will be NULL (as it has not yet been determined).
-        * @param source The source of the access check
-        * @param dest The destination of the access check
-        * @param channel The channel which is being checked
-        * @param access_type See above
-        */
-       virtual ModResult OnAccessCheck(User* source,User* dest,Channel* channel,int access_type);
+       /** Called before any mode change, to allow a single access check for
+        * a full mode change (use OnRawMode to check individual modes)
+        *
+        * Returning MOD_RES_ALLOW will skip prefix level checks, but can be overridden by
+        * OnRawMode for each individual mode
+        *
+        * @param source the user making the mode change
+        * @param dest the user destination of the umode change (NULL if a channel mode)
+        * @param channel the channel destination of the mode change
+        * @param parameters raw mode parameters; parameters[0] is the user/channel being changed
+        */
+       virtual ModResult OnPreMode(User* source, User* dest, Channel* channel, const std::vector<std::string>& parameters);
 
        /** Called when a 005 numeric is about to be output.
         * The module should modify the 005 numeric if needed to indicate its features.
@@ -1406,7 +1362,7 @@ class CoreExport Module : public Extensible
         * For example NAMESX, channel mode +u and +I, and UHNAMES. If the nick is set to an empty string by any
         * module, then this will cause the nickname not to be displayed at all.
         */
-       virtual void OnNamesListItem(User* issuer, User* user, Channel* channel, std::string &prefixes, std::string &nick);
+       virtual void OnNamesListItem(User* issuer, Membership* item, std::string &prefixes, std::string &nick);
 
        virtual ModResult OnNumeric(User* user, unsigned int numeric, const std::string &text);