summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/modules.h25
-rw-r--r--src/channels.c2
-rw-r--r--src/users.c2
3 files changed, 29 insertions, 0 deletions
diff --git a/include/modules.h b/include/modules.h
index 4e02d3b97..7a122804d 100644
--- a/include/modules.h
+++ b/include/modules.h
@@ -923,6 +923,30 @@ class CoreExport Module
*/
virtual void OnInsertHostCore(HostCore *hc) { }
+ /** Called when a mode is set on a channel
+ * @param c The channel
+ * @param Name The mode name
+ */
+ virtual void OnChannelModeSet(Channel *c, ChannelModeName Name) { }
+
+ /** Called when a mode is unset on a channel
+ * @param c The channel
+ * @param Name The mode name
+ */
+ virtual void OnChannelModeUnset(Channel *c, ChannelModeName Name) { }
+
+ /** Called when a mode is set on a user
+ * @param u The user
+ * @param Name The mode name
+ */
+ virtual void OnUserModeSet(User *u, UserModeName Name) { }
+
+ /** Called when a mode is unset from a user
+ * @param u The user
+ * @param Name The mode name
+ */
+ virtual void OnUserModeUnset(User *u, UserModeName Name) { }
+
};
@@ -960,6 +984,7 @@ enum Implementation
I_OnPreDatabaseExpire, I_OnDatabaseExpire, I_OnPreRestart, I_OnRestart, I_OnPreShutdown, I_OnShutdown, I_OnSignal,
I_OnServerQuit, I_OnTopicUpdated,
I_OnEncrypt, I_OnEncryptInPlace, I_OnEncryptCheckLen, I_OnDecrypt, I_OnCheckPassword,
+ I_OnChannelModeSet, I_OnChannelModeUnset, I_OnUserModeSet, I_OnUserModeUnset,
I_END
};
diff --git a/src/channels.c b/src/channels.c
index 3aa7c840e..6bd4e5350 100644
--- a/src/channels.c
+++ b/src/channels.c
@@ -39,6 +39,7 @@ bool Channel::HasMode(ChannelModeName Name)
void Channel::SetMode(ChannelModeName Name)
{
modes[(size_t)Name] = true;
+ FOREACH_MOD(I_OnChannelModeSet, OnChannelModeSet(this, Name));
}
/**
@@ -62,6 +63,7 @@ void Channel::SetMode(char Mode)
void Channel::RemoveMode(ChannelModeName Name)
{
modes[(size_t)Name] = false;
+ FOREACH_MOD(I_OnChannelModeUnset, OnChannelModeUnset(this, Name));
}
/**
diff --git a/src/users.c b/src/users.c
index 79dc37ac6..9413b26ae 100644
--- a/src/users.c
+++ b/src/users.c
@@ -490,6 +490,7 @@ const bool User::HasMode(UserModeName Name) const
void User::SetMode(UserModeName Name)
{
modes[(size_t)Name] = true;
+ FOREACH_MOD(I_OnUserModeSet, OnUserModeSet(this, Name));
}
/* Set a mode on the user
@@ -511,6 +512,7 @@ void User::SetMode(char ModeChar)
void User::RemoveMode(UserModeName Name)
{
modes[(size_t)Name] = false;
+ FOREACH_MOD(I_OnUserModeUnset, OnUserModeUnset(this, Name));
}
/** Remove a mode from the user