summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorw00t <w00t@e03df62e-2008-0410-955e-edbf42e46eb7>2008-01-06 21:04:56 +0000
committerw00t <w00t@e03df62e-2008-0410-955e-edbf42e46eb7>2008-01-06 21:04:56 +0000
commit413074b77152edce980daa0e1dfecc42e15ada33 (patch)
treec045a5f95653e681f5f9dbb8f5e2fbf3ca0bc6c2
parent0f4f272e889c4269e5564a74b0c63c3d92bc5916 (diff)
OnRawMode event makes a return: This was removed post 1.0 because it was incredibly slow with the previous hooking mechanism. It should be okay now that module hooks aren't O(n).. Just the header and virtual atm, no implementation in the parser.
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@8653 e03df62e-2008-0410-955e-edbf42e46eb7
-rw-r--r--include/modules.h14
-rw-r--r--src/modules.cpp1
2 files changed, 14 insertions, 1 deletions
diff --git a/include/modules.h b/include/modules.h
index 250613c9b..eab968e7a 100644
--- a/include/modules.h
+++ b/include/modules.h
@@ -395,7 +395,7 @@ enum Implementation
I_OnGetServerDescription, I_OnSyncUser, I_OnSyncChannel, I_OnSyncChannelMetaData, I_OnSyncUserMetaData,
I_OnDecodeMetaData, I_ProtoSendMode, I_ProtoSendMetaData, I_OnWallops, I_OnChangeHost, I_OnChangeName, I_OnAddLine,
I_OnDelLine, 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_OnCheckInvite,
+ I_OnBackgroundTimer, I_OnPreCommand, I_OnCheckReady, I_OnCheckInvite, I_OnRawMode,
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,
@@ -1085,6 +1085,18 @@ class CoreExport Module : public Extensible
*/
virtual int OnCheckInvite(User* user, Channel* chan);
+ /** Called whenever a mode character is processed.
+ * Return 1 from this function to block the mode character from being processed entirely.
+ * @param user The user who is sending the mode
+ * @param chan The channel the mode is being sent to (or NULL if a usermode)
+ * @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(User* user, Channel* chan, char mode, const std::string &param, bool adding, int pcnt);
+
/** Called whenever a user joins a channel, to determine if key checks should go ahead or not.
* This method will always be called for each join, wether or not the channel is actually +k, and
* determines the outcome of an if statement around the whole section of key checking code.
diff --git a/src/modules.cpp b/src/modules.cpp
index 87fd393f8..36f0eb2e5 100644
--- a/src/modules.cpp
+++ b/src/modules.cpp
@@ -140,6 +140,7 @@ bool Module::OnCheckReady(User*) { return true; }
int Module::OnUserRegister(User*) { return 0; }
int Module::OnUserPreKick(User*, User*, Channel*, const std::string&) { return 0; }
void Module::OnUserKick(User*, User*, Channel*, const std::string&, bool&) { }
+int Module::OnRawMode(User*, Channel*, char, const std::string &, bool, int) { return 0; }
int Module::OnCheckInvite(User*, Channel*) { return 0; }
int Module::OnCheckKey(User*, Channel*, const std::string&) { return 0; }
int Module::OnCheckLimit(User*, Channel*) { return 0; }