]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - include/modules.h
Added OnUserPreInvite method for use with +V etc
[user/henk/code/inspircd.git] / include / modules.h
index df971b611d7fca1f5a6117519c54808c78bea173..978a9a4a6be03c7333e13dae8748b011f0e581ed 100644 (file)
@@ -1,8 +1,18 @@
-/*
-
-
-
-*/
+/*       +------------------------------------+
+ *       | Inspire Internet Relay Chat Daemon |
+ *       +------------------------------------+
+ *
+ *  Inspire is copyright (C) 2002-2004 ChatSpike-Dev.
+ *                       E-mail:
+ *                <brain@chatspike.net>
+ *               <Craig@chatspike.net>
+ *     
+ * Written by Craig Edwards, Craig McLure, and others.
+ * This program is free but copyrighted software; see
+ *            the file COPYING for details.
+ *
+ * ---------------------------------------------------
+ */
 
 
 #ifndef __PLUGIN_H
@@ -70,12 +80,12 @@ typedef std::deque<userrec*> chanuserlist;
 #define FOREACH_RESULT(x) { MOD_RESULT = 0; \
                        for (int i = 0; i <= MODCOUNT; i++) { \
                        int res = modules[i]->x ; \
-                       if (res) { \
+                       if (res != 0) { \
                                MOD_RESULT = res; \
                                break; \
                        } \
                } \
-   } 
+       
    
 // *********************************************************************************************
 
@@ -201,9 +211,10 @@ class Module : public classbase
        virtual int OnExtendedMode(userrec* user, void* target, char modechar, int type, bool mode_on, string_list &params);
        
        /** Called whenever a user is about to join a channel, before any processing is done.
-        * Returning any nonzero value from this function stops the process immediately, causing no
+        * Returning a value of 1 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 mimic +b, +k, +l etc.
+        * notices etc. This is useful for modules which may want to mimic +b, +k, +l etc. Returning -1 from
+        * this function forces the join to be allowed, bypassing restrictions such as banlists, invite, keys etc.
         *
         * IMPORTANT NOTE!
         *
@@ -227,7 +238,7 @@ class Module : public classbase
         * It is purposefully not possible to modify any info that has already been output, or halt the list.
         * You must write a 371 numeric to the user, containing your info in the following format:
         *
-        * <nick> :information here
+        * &lt;nick&gt; :information here
         */
        virtual void OnInfo(userrec* user);
        
@@ -237,6 +248,13 @@ class Module : public classbase
         */
        virtual void OnWhois(userrec* source, userrec* dest);
        
+       /** Called whenever a user is about to invite another user into 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 invites to channels.
+        */
+       virtual int OnUserPreInvite(userrec* source,userrec* dest,chanrec* channel);
+       
        /** 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,
@@ -599,10 +617,15 @@ class Server : public classbase
        /** Fetches the userlist of a channel. This function must be here and not a member of userrec or
         * chanrec due to include constraints.
         */
-       virtual chanuserlist Server::GetUsers(chanrec* chan);
+       virtual chanuserlist GetUsers(chanrec* chan);
 
 };
 
+#define CONF_NOT_A_NUMBER      0x000010
+#define CONF_NOT_UNSIGNED      0x000080
+#define CONF_VALUE_NOT_FOUND   0x000100
+#define CONF_FILE_NOT_FOUND    0x000200
+
 /** Allows reading of values from configuration files
  * This class allows a module to read from either the main configuration file (inspircd.conf) or from
  * a module-specified configuration file. It may either be instantiated with one parameter or none.
@@ -620,7 +643,8 @@ class ConfigReader : public classbase
        std::stringstream *cache;
        /** Used to store errors
         */
-       bool error;
+       bool readerror;
+       long error;
        
   public:
        /** Default constructor.
@@ -641,6 +665,26 @@ class ConfigReader : public classbase
         * exist in the config file, index indicates which of the values to retrieve.
         */
        std::string ReadValue(std::string tag, std::string name, int index);
+       /** Retrieves a boolean value from the config file.
+        * This method retrieves a boolean value from the config file. Where multiple copies of the tag
+        * exist in the config file, index indicates which of the values to retrieve. The values "1", "yes"
+        * and "true" in the config file count as true to ReadFlag, and any other value counts as false.
+        */
+       bool ReadFlag(std::string tag, std::string name, int index);
+       /** Retrieves an integer value from the config file.
+        * This method retrieves an integer value from the config file. Where multiple copies of the tag
+        * exist in the config file, index indicates which of the values to retrieve. Any invalid integer
+        * values in the tag will cause the objects error value to be set, and any call to GetError() will
+        * return CONF_INVALID_NUMBER to be returned. needs_unsigned is set if the number must be unsigned.
+        * If a signed number is placed into a tag which is specified unsigned, 0 will be returned and GetError()
+        * will return CONF_NOT_UNSIGNED
+        */
+       long ReadInteger(std::string tag, std::string name, int index, bool needs_unsigned);
+       /** Returns the last error to occur.
+        * Valid errors can be found by looking in modules.h. Any nonzero value indicates an error condition.
+        * A call to GetError() resets the error flag back to 0.
+        */
+       long GetError();
        /** Counts the number of times a given tag appears in the config file.
         * This method counts the number of times a tag appears in a config file, for use where
         * there are several tags of the same kind, e.g. with opers and connect types. It can be