]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - include/modules.h
Pass the modes to the OnMode hook as a Modes::ChangeList, pass ModeProcessFlags too
[user/henk/code/inspircd.git] / include / modules.h
index 9c0b22b6c075fd90a2cbdba4eaa11919ff64ac25..de0faf6d4a6bcbe5f412408fcb7118d30cfe6a23 100644 (file)
@@ -558,17 +558,14 @@ class CoreExport Module : public classbase, public usecountbase
         */
        virtual void OnBuildNeighborList(User* source, IncludeChanList& include_c, std::map<User*, bool>& exceptions);
 
-       /** Called before any nickchange, local or remote. This can be used to implement Q-lines etc.
-        * Please note that although you can see remote nickchanges through this function, you should
-        * NOT make any changes to the User if the user is a remote user as this may cause a desnyc.
-        * check user->server before taking any action (including returning nonzero from the method).
+       /** Called before local nickname changes. This can be used to implement Q-lines etc.
         * If your method returns nonzero, the nickchange is silently forbidden, and it is down to your
         * module to generate some meaninful output.
         * @param user The username changing their nick
         * @param newnick Their new nickname
         * @return 1 to deny the change, 0 to allow
         */
-       virtual ModResult OnUserPreNick(User* user, const std::string &newnick);
+       virtual ModResult OnUserPreNick(LocalUser* user, const std::string& newnick);
 
        /** Called after any PRIVMSG sent from a user.
         * The dest variable contains a User* if target_type is TYPE_USER and a Channel*
@@ -601,15 +598,16 @@ class CoreExport Module : public classbase, public usecountbase
        /** Called after every MODE command sent from a user
         * Either the usertarget or the chantarget variable contains the target of the modes,
         * the actual target will have a non-NULL pointer.
-        * The modes vector contains the remainder of the mode string after the target,
-        * e.g.: "+wsi" or ["+ooo", "nick1", "nick2", "nick3"].
+        * All changed modes are available in the changelist object.
         * @param user The user sending the MODEs
         * @param usertarget The target user of the modes, NULL if the target is a channel
         * @param chantarget The target channel of the modes, NULL if the target is a user
-        * @param modes The actual modes and their parameters if any
-        * @param translate The translation types of the mode parameters
+        * @param changelist The changed modes.
+        * @param processflags Flags passed to ModeParser::Process(), see ModeParser::ModeProcessFlags
+        * for the possible flags.
+        * @param output_mode Changed modes, including '+' and '-' characters, not including any parameters
         */
-       virtual void OnMode(User* user, User* usertarget, Channel* chantarget, const std::vector<std::string>& modes, const std::vector<TranslateType>& translate);
+       virtual void OnMode(User* user, User* usertarget, Channel* chantarget, const Modes::ChangeList& changelist, ModeParser::ModeProcessFlag processflags, const std::string& output_mode);
 
        /** Allows modules to synchronize data which relates to users during a netburst.
         * When this function is called, it will be called from the module which implements
@@ -1041,10 +1039,16 @@ class CoreExport Module : public classbase, public usecountbase
 #endif
 
        /** Called for every item in a NAMES list, so that modules may reformat portions of it as they see fit.
-        * 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.
+        * For example NAMESX, channel mode +u and +I, and UHNAMES.
+        * @param issuer The user who is going to receive the NAMES list being built
+        * @param item The channel member being considered for inclusion
+        * @param prefixes The prefix character(s) to display, initially set to the prefix char of the most powerful
+        * prefix mode the member has, can be changed
+        * @param nick The nick to display, initially set to the member's nick, can be changed
+        * @return Return MOD_RES_PASSTHRU to allow the member to be displayed, MOD_RES_DENY to cause them to be
+        * excluded from this NAMES list
         */
-       virtual void OnNamesListItem(User* issuer, Membership* item, std::string &prefixes, std::string &nick);
+       virtual ModResult OnNamesListItem(User* issuer, Membership* item, std::string& prefixes, std::string& nick);
 
        virtual ModResult OnNumeric(User* user, unsigned int numeric, const std::string &text);
 
@@ -1075,7 +1079,7 @@ typedef IntModuleList::iterator EventHandlerIter;
 /** ModuleManager takes care of all things module-related
  * in the core.
  */
-class CoreExport ModuleManager
+class CoreExport ModuleManager : public fakederef<ModuleManager>
 {
  public:
        typedef std::vector<ServiceProvider*> ServiceList;
@@ -1337,7 +1341,7 @@ struct AllModuleList {
        { \
                return new y; \
        } \
-       extern "C" DllExport const char inspircd_src_version[] = VERSION " " REVISION;
+       extern "C" DllExport const char inspircd_src_version[] = INSPIRCD_VERSION " " INSPIRCD_REVISION;
 #endif
 
 #define COMMAND_INIT(c) MODULE_INIT(CommandModule<c>)