feat: fire GUILD_ROSTER_UPDATE and GUILD_MOTD events for guild addons

Fire GUILD_ROSTER_UPDATE from SMSG_GUILD_ROSTER and from guild events
(member join/leave/kick, promotions, leader changes, online/offline,
disbanded). Fire GUILD_MOTD with the MOTD text when received.

These events are needed by guild management addons (GuildGreet,
GuildRoster replacements, officer tools) to refresh their UI.
This commit is contained in:
Kelsi 2026-03-21 03:04:59 -07:00
parent b8d92b5ff2
commit b7e5034f27

View file

@ -20545,6 +20545,7 @@ void GameHandler::handleGuildRoster(network::Packet& packet) {
guildRoster_ = std::move(data);
hasGuildRoster_ = true;
LOG_INFO("Guild roster received: ", guildRoster_.members.size(), " members");
if (addonEventCallback_) addonEventCallback_("GUILD_ROSTER_UPDATE", {});
}
void GameHandler::handleGuildQueryResponse(network::Packet& packet) {
@ -20643,6 +20644,28 @@ void GameHandler::handleGuildEvent(network::Packet& packet) {
addLocalChatMessage(chatMsg);
}
// Fire addon events for guild state changes
if (addonEventCallback_) {
switch (data.eventType) {
case GuildEvent::MOTD:
addonEventCallback_("GUILD_MOTD", {data.numStrings >= 1 ? data.strings[0] : ""});
break;
case GuildEvent::SIGNED_ON:
case GuildEvent::SIGNED_OFF:
case GuildEvent::PROMOTION:
case GuildEvent::DEMOTION:
case GuildEvent::JOINED:
case GuildEvent::LEFT:
case GuildEvent::REMOVED:
case GuildEvent::LEADER_CHANGED:
case GuildEvent::DISBANDED:
addonEventCallback_("GUILD_ROSTER_UPDATE", {});
break;
default:
break;
}
}
// Auto-refresh roster after membership/rank changes
switch (data.eventType) {
case GuildEvent::PROMOTION: