]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - include/modules.h
Added OnUserPreMessage and OnUserPreNotice events (not tested yet)
[user/henk/code/inspircd.git] / include / modules.h
index 089ef0afcadc6f684198756e5da32e3a25502c86..d0195bd1b87166d4dada1b360670bddc1fdb4e64 100644 (file)
@@ -184,7 +184,7 @@ class Module : public classbase
         * processing on the actual channel record at this point, however the channel NAME will still be passed in
         * char* cname, so that you could for example implement a channel blacklist or whitelist, etc.
         */
-       virtual int OnUserPreJoin(userrec* user, chanrec* chan, char* cname);
+       virtual int OnUserPreJoin(userrec* user, chanrec* chan, const char* cname);
        
        
        /** Called whenever a user opers locally.
@@ -207,7 +207,27 @@ class Module : public classbase
         * The source parameter contains the details of the user who issued the WHOIS command, and
         * the dest parameter contains the information of the user they are whoising.
         */
-       void Module::OnWhois(userrec* source, userrec* dest);
+       virtual void Module::OnWhois(userrec* source, userrec* dest);
+       
+       /** Called whenever a user is about to PRIVMSG A user or a channel, before any processing is done.
+        * Returning any nonzero value from this function stops the process immediately, causing no
+        * output to be sent to the user by the core. If you do this you must produce your own numerics,
+        * notices etc. This is useful for modules which may want to filter or redirect messages.
+        * target_type can be one of TYPE_USER or TYPE_CHANNEL. If the target_type value is a user,
+        * you must cast dest to a userrec* otherwise you must cast it to a chanrec*, this is the details
+        * of where the message is destined to be sent.
+        */
+       virtual int OnUserPreMessage(userrec* user,void* dest,int target_type, std::String text);
+
+       /** Called whenever a user is about to NOTICE A user or a channel, before any processing is done.
+        * Returning any nonzero value from this function stops the process immediately, causing no
+        * output to be sent to the user by the core. If you do this you must produce your own numerics,
+        * notices etc. This is useful for modules which may want to filter or redirect messages.
+        * target_type can be one of TYPE_USER or TYPE_CHANNEL. If the target_type value is a user,
+        * you must cast dest to a userrec* otherwise you must cast it to a chanrec*, this is the details
+        * of where the message is destined to be sent.
+        */
+       virtual int OnUserPreNotice(userrec* user,void* dest,int target_type, std::String text);
 };
 
 
@@ -384,6 +404,39 @@ class Server : public classbase
         * user must have both modes set to receive the message.
         */
        virtual void SendToModeMask(std::string modes, int flags, std::string text);
+
+       /** Forces a user to join a channel.
+        * This is similar to svsjoin and can be used to implement redirection, etc.
+        * On success, the return value is a valid pointer to a chanrec* of the channel the user was joined to.
+        * On failure, the result is NULL.
+        */
+       virtual chanrec* Server::JoinUserToChannel(userrec* user, std::string cname, std::string key);
+       
+       /** Forces a user to part a channel.
+        * This is similar to svspart and can be used to implement redirection, etc.
+        * Although the return value of this function is a pointer to a channel record, the returned data is
+        * undefined and should not be read or written to. This behaviour may be changed in a future version.
+        */
+       virtual chanrec* Server::PartUserFromChannel(userrec* user, std::string cname, std::string reason);
+       
+       /** Forces a user nickchange.
+        * This command works similarly to SVSNICK, and can be used to implement Q-lines etc.
+        * If you specify an invalid nickname, the nick change will be dropped and the target user will receive
+        * the error numeric for it.
+        */
+       virtual void ChangeUserNick(userrec* user, std::string nickname);
+       
+       /** Forces a user to quit with the specified reason.
+        * To the user, it will appear as if they typed /QUIT themselves, except for the fact that this function
+        * may bypass the quit prefix specified in the config file.
+        *
+        * WARNING!
+        *
+        * Once you call this function, userrec* user will immediately become INVALID. You MUST NOT write to, or
+        * read from this pointer after calling the QuitUser method UNDER ANY CIRCUMSTANCES! The best course of
+        * action after calling this method is to immediately bail from your handler.
+        */
+       virtual void QuitUser(userrec* user, std::string reason);
 };
 
 /** Allows reading of values from configuration files