From ef88adc36d5c5214a15e653a6cfe827660bdfb0a Mon Sep 17 00:00:00 2001 From: Sadie Powell Date: Wed, 17 Jun 2026 15:03:07 +0100 Subject: Allow an event hook for after messages are sent to a client. --- include/clientprotocol.h | 15 +++++++++++++++ src/clientprotocol.cpp | 6 ++++++ src/users.cpp | 1 + 3 files changed, 22 insertions(+) diff --git a/include/clientprotocol.h b/include/clientprotocol.h index a68aa0541..61db79037 100644 --- a/include/clientprotocol.h +++ b/include/clientprotocol.h @@ -543,6 +543,12 @@ public: * @param messagelist List to fill in with messages to send to the user for the event */ void GetMessagesForUser(LocalUser* user, MessageList& messagelist); + + /** Called after a list of messages was sent to a user. + * @param user User that messages were sent to. + * @param messagelist List containing messages that were sent to the user for the event. + */ + void PostSendMessagesToUser(LocalUser* user, const MessageList& messagelist); }; class CoreExport ClientProtocol::MessageTagEvent @@ -648,6 +654,15 @@ public: * MOD_RES_ALLOW to send the messages in messagelist to the user and to not run other hooks. */ virtual ModResult OnPreEventSend(LocalUser* user, const ClientProtocol::Event& ev, ClientProtocol::MessageList& messagelist) = 0; + + /** Called for each user that received the event. + * @param user User the message list was sent to. + * @param ev Event associated with the messages. + * @param messagelist List of messages that were sent to the user. + */ + virtual void OnPostEventSend(LocalUser* user, const ClientProtocol::Event& ev, const ClientProtocol::MessageList& messagelist) + { + } }; /** Event provider for client protocol events. diff --git a/src/clientprotocol.cpp b/src/clientprotocol.cpp index 519c6b21b..de3516707 100644 --- a/src/clientprotocol.cpp +++ b/src/clientprotocol.cpp @@ -175,3 +175,9 @@ void ClientProtocol::Event::GetMessagesForUser(LocalUser* user, MessageList& mes if (res == MOD_RES_DENY) messagelist.clear(); } + +void ClientProtocol::Event::PostSendMessagesToUser(LocalUser* user, const MessageList& messagelist) +{ + if (this->event) + this->event->Call(&EventHook::OnPostEventSend, user, *this, messagelist); +} diff --git a/src/users.cpp b/src/users.cpp index b366ed951..a1df507c4 100644 --- a/src/users.cpp +++ b/src/users.cpp @@ -764,6 +764,7 @@ void LocalUser::Send(ClientProtocol::Event& protoev, ClientProtocol::MessageList if (res != MOD_RES_DENY) Write(serializer->SerializeForUser(this, curr)); } + protoev.PostSendMessagesToUser(this, msglist); } void User::WriteNumeric(const Numeric::Numeric& numeric) -- cgit v1.3.1-10-gc9f91