diff options
-rw-r--r-- | include/modules.h | 25 | ||||
-rw-r--r-- | src/channels.c | 2 | ||||
-rw-r--r-- | src/users.c | 2 |
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 |