]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - include/modules.h
fix for bug #175, change OnUserRegister to return int, and if greater than 0 = user...
[user/henk/code/inspircd.git] / include / modules.h
index df9497fd2db64b1b49a52f99bda2477de2ce2aa3..8e2746bf0bec2d3e04ed1c0fcee272f097091d73 100644 (file)
@@ -68,9 +68,18 @@ enum TargetTypeFlags {
 #include "mode.h"
 #include "dns.h"
 
-/** If you change the module API, change this value
+/** If you change the module API, change this value.
+ * If you have enabled ipv6, the sizes of structs is
+ * different, and modules will be incompatible with
+ * ipv4 servers, so this value will be ten times as
+ * high on ipv6 servers.
  */
-#define API_VERSION 11001
+#define NATIVE_API_VERSION 11004
+#ifdef IPV6
+#define API_VERSION (NATIVE_API_VERSION * 10)
+#else
+#define API_VERSION (NATIVE_API_VERSION * 1)
+#endif
 
 class ServerConfig;
 
@@ -304,7 +313,7 @@ class Event : public ModuleMessage
  * be loaded. If this happens, the error message returned by ModuleException::GetReason will be displayed to the user
  * attempting to load the module, or dumped to the console if the ircd is currently loading for the first time.
  */
-class ModuleException : public classbase
+class ModuleException : public std::exception
 {
  private:
        /** Holds the error message to be displayed
@@ -319,8 +328,9 @@ class ModuleException : public classbase
        ModuleException(std::string message) : err(message) {}
        /** This destructor solves world hunger, cancels the world debt, and causes the world to end.
         * Actually no, it does nothing. Never mind.
+        * @throws Nothing!
         */
-       virtual ~ModuleException() {};
+       virtual ~ModuleException() throw() {};
        /** Returns the reason for the exception.
         * The module should probably put something informative here as the user will see this upon failure.
         */
@@ -343,11 +353,12 @@ enum Implementation {     I_OnUserConnect, I_OnUserQuit, I_OnUserDisconnect, I_OnUse
                        I_OnDecodeMetaData, I_ProtoSendMode, I_ProtoSendMetaData, I_OnWallops, I_OnChangeHost, I_OnChangeName, I_OnAddGLine,
                        I_OnAddZLine, I_OnAddQLine, I_OnAddKLine, I_OnAddELine, I_OnDelGLine, I_OnDelZLine, I_OnDelKLine, I_OnDelELine, I_OnDelQLine,
                        I_OnCleanup, I_OnUserPostNick, I_OnAccessCheck, I_On005Numeric, I_OnKill, I_OnRemoteKill, I_OnLoadModule, I_OnUnloadModule,
-                       I_OnBackgroundTimer, I_OnPreCommand, I_OnCheckReady, I_OnUserRrgister, I_OnRawMode, I_OnCheckInvite,
+                       I_OnBackgroundTimer, I_OnPreCommand, I_OnCheckReady, I_OnUserRrgister, I_OnCheckInvite,
                        I_OnCheckKey, I_OnCheckLimit, I_OnCheckBan, I_OnStats, I_OnChangeLocalUserHost, I_OnChangeLocalUserGecos, I_OnLocalTopicChange,
                        I_OnPostLocalTopicChange, I_OnEvent, I_OnRequest, I_OnOperCompre, I_OnGlobalOper, I_OnPostConnect, I_OnAddBan, I_OnDelBan,
                        I_OnRawSocketAccept, I_OnRawSocketClose, I_OnRawSocketWrite, I_OnRawSocketRead, I_OnChangeLocalUserGECOS, I_OnUserRegister,
-                       I_OnOperCompare, I_OnChannelDelete, I_OnPostOper, I_OnSyncOtherMetaData, I_OnSetAway, I_OnCancelAway, I_OnUserList, I_OnPostCommand, I_OnPostJoin };
+                       I_OnOperCompare, I_OnChannelDelete, I_OnPostOper, I_OnSyncOtherMetaData, I_OnSetAway, I_OnCancelAway, I_OnUserList,
+                       I_OnPostCommand, I_OnPostJoin, I_OnWhoisLine };
 
 /** Base class for all InspIRCd modules
  *  This class is the base class for InspIRCd modules. All modules must inherit from this class,
@@ -1051,22 +1062,9 @@ class Module : public Extensible
         * Note that you should NOT delete the user record here by causing a disconnection!
         * Use OnUserConnect for that instead.
         * @param user The user registering
+        * @return 1 to indicate user quit, 0 to continue
         */
-       virtual void OnUserRegister(userrec* user);
-
-       /** Called whenever a mode character is processed.
-        * Return 1 from this function to block the mode character from being processed entirely,
-        * so that you may perform your own code instead. Note that this method allows you to override
-        * modes defined by other modes, but this is NOT RECOMMENDED!
-        * @param user The user who is sending the mode
-        * @param chan The channel the mode is being sent to
-        * @param mode The mode character being set
-        * @param param The parameter for the mode or an empty string
-        * @param adding true of the mode is being added, false if it is being removed
-        * @param pcnt The parameter count for the mode (0 or 1)
-        * @return 1 to deny the mode, 0 to allow
-        */
-       virtual int OnRawMode(userrec* user, chanrec* chan, char mode, const std::string &param, bool adding, int pcnt);
+       virtual int OnUserRegister(userrec* user);
 
        /** Called whenever a user joins a channel, to determine if invite checks should go ahead or not.
         * This method will always be called for each join, wether or not the channel is actually +i, and
@@ -1277,6 +1275,19 @@ class Module : public Extensible
         * return 0.
         */
        virtual int OnUserList(userrec* user, chanrec* Ptr);
+
+       /** Called whenever a line of WHOIS output is sent to a user.
+        * You may change the numeric and the text of the output by changing
+        * the values numeric and text, but you cannot change the user the
+        * numeric is sent to. You may however change the user's userrec values.
+        * @param user The user the numeric is being sent to
+        * @param dest The user being WHOISed
+        * @param numeric The numeric of the line being sent
+        * @param text The text of the numeric, including any parameters
+        * @return nonzero to drop the line completely so that the user does not
+        * receive it, or zero to allow the line to be sent.
+        */
+       virtual int OnWhoisLine(userrec* user, userrec* dest, int &numeric, std::string &text);
 };