diff --git a/Dalamud/Game/Internal/Gui/ChatGui.cs b/Dalamud/Game/Internal/Gui/ChatGui.cs
index 6a67162b1..5c903a5c5 100644
--- a/Dalamud/Game/Internal/Gui/ChatGui.cs
+++ b/Dalamud/Game/Internal/Gui/ChatGui.cs
@@ -19,6 +19,8 @@ namespace Dalamud.Game.Internal.Gui {
public delegate void OnMessageDelegate(XivChatType type, uint senderId, ref SeString sender, ref SeString message, ref bool isHandled);
public delegate void OnMessageRawDelegate(XivChatType type, uint senderId, ref StdString sender, ref StdString message, ref bool isHandled);
public delegate void OnCheckMessageHandledDelegate(XivChatType type, uint senderId, ref SeString sender, ref SeString message, ref bool isHandled);
+ public delegate void OnMessageHandledDelegate(XivChatType type, uint senderId, SeString sender, SeString message);
+ public delegate void OnMessageUnhandledDelegate(XivChatType type, uint senderId, SeString sender, SeString message);
///
/// Event that allows you to stop messages from appearing in chat by setting the isHandled parameter to true.
@@ -30,6 +32,16 @@ namespace Dalamud.Game.Internal.Gui {
///
public event OnMessageDelegate OnChatMessage;
+ ///
+ /// Event that will be fired when a chat message is handled by Dalamud or a Plugin.
+ ///
+ public event OnMessageHandledDelegate OnChatMessageHandled;
+
+ ///
+ /// Event that will be fired when a chat message is not handled by Dalamud or a Plugin.
+ ///
+ public event OnMessageUnhandledDelegate OnChatMessageUnhandled;
+
///
/// Event that will be fired when a chat message is sent by the game, containing raw, unparsed data.
///
@@ -167,8 +179,15 @@ namespace Dalamud.Game.Internal.Gui {
}
// Print the original chat if it's handled.
- if (!isHandled)
+ if (isHandled)
+ {
+ OnChatMessageHandled?.Invoke(chattype, senderid, parsedSender, parsedMessage);
+ }
+ else
+ {
retVal = this.printMessageHook.Original(manager, chattype, pSenderName, messagePtr, senderid, parameter);
+ OnChatMessageUnhandled?.Invoke(chattype, senderid, parsedSender, parsedMessage);
+ }
if (this.baseAddress == IntPtr.Zero)
this.baseAddress = manager;