File Details
GuildRoster-v0.0.4
- R
- May 23, 2026
- 19.61 KB
- 9
- 12.0.1+6
- Retail + 2
File Name
GuildRoster-GuildRoster-v0.0.4.zip
Supported Versions
- 12.0.1
- 12.0.0
- 11.2.7
- 4.4.0
- 3.4.3
- 2.5.5
- 1.15.8
Changelog
All notable changes to LibGuildRoster-1.0 are documented here.
0.0.4 — Defuse retail "secret string" taint in CHAT_MSG_SYSTEM
LibStub MINOR bumped to 4.
Fixed
CHAT_MSG_SYSTEMno longer errors on protected "secret" string values. Retail (TWW+) sometimes delivers internal BNet / whisper- related signals viaCHAT_MSG_SYSTEMwith a server-side protection flag. Any operation on such a value (==,gsub,match) throwsattempt to compare local 'message' (a secret string value, while execution tainted by '<addon>')from the first comparison inOnChatMsgSystem. The handler then aborted, and on some clients the event frame stayed tainted so subsequent legitimate guild events (online / offline / join / leave) were missed entirely. The lib now pcalls the empty-string check at the top of the handler; if the comparison itself errors, the message is protected and we silently bail before touching it further — those messages would never match our guild-event patterns anyway. Reported as 18× repeated errors from a consumer addon (FastGuildInvite) embedding this lib on retail.
0.0.3 — Switch to Ace3-supplied LibStub / CallbackHandler-1.0
Fixed
- Standalone install no longer errors on missing LibStub. v0.0.1 and
v0.0.2 declared
LibStubandCallbackHandler-1.0as.pkgmetaexternals, so a raw git checkout (or a dev sync that didn't go through the CurseForge packager) had noLibs/LibStub/LibStub.luaon disk and the TOC'sLibs\LibStub\LibStub.lualine produced aLUA_WARNING: Error loading GuildRoster/Libs/LibStub/LibStub.lua. The TOCs no longer reference those files at all; Ace3 supplies both libraries globally viaLibStubbeforeLibGuildRoster-1.0.luaruns.
Changed
- Ace3 is now a required dependency. All five TOCs declare
## Dependencies: Ace3and.pkgmetalistsrequired-dependencies: - ace3, so CurseForge auto-installs Ace3 alongside this lib and the game loader pulls it in first at runtime. Theexternals:block has been removed from.pkgmeta. enable-toc-creation: nobecause we ship explicit TOCs for every flavour and don't need the packager to synthesise any.
Notes for embedding consumers
If your addon embeds this lib via externals:, you still need
LibStub and CallbackHandler-1.0 available before
LibGuildRoster-1.0.lua loads — either from your own embedded copies,
from Ace3 as a dependency of your addon, or from any other lib that
brings them in. The lib itself no longer ships them.
No library API or behaviour changes; LibStub MINOR stays at 3.
0.0.2 — Locale fix, expanded member data, rank-change callback
LibStub MINOR bumped to 3.
Fixed
- CHAT_MSG_SYSTEM patterns are now locale-aware. The hardcoded English
strings (
"has come online","has joined the guild", etc.) silently failed on every non-English client — German, French, Russian, Chinese, and others were all reduced to picking up online/offline/join/leave transitions only on the next fullGUILD_ROSTER_UPDATErebuild instead of in real time. Patterns are now built once at file load from Blizzard's localized format-string globals (ERR_FRIEND_ONLINE_SS,ERR_FRIEND_OFFLINE_S,ERR_GUILD_JOIN_S,ERR_GUILD_LEAVE_S,ERR_GUILD_REMOVE_SS). Chat-hyperlink markup is stripped from incoming messages before matching, and brackets[Name]are made optional in the pattern so both bracketed and bare forms match.
Added
- Expanded
GetMemberfields. The member table now includeszone,publicNote,officerNote,status(0 = available, 1 = AFK, 2 = DND),isMobile(Companion App connection), andlastOnline({ years, months, days, hours }for offline members, nil otherwise). Previously these were silently discarded from theGetGuildRosterInforeturn — consumers had to re-iterate the whole roster themselves to recover them. lib:IsReady()getter. Returns true once the first stabilized full roster build has completed. Consumers that register callbacks after the lib has already initialized (common on/reload, or when the consumer addon loads later than the lib) would otherwise miss theOnRosterReadyfire; checkIsReady()and run the ready-time logic inline when it returns true.OnMemberRankChanged(name, oldRankIndex, newRankIndex)callback. Fires when a member's rank changes between rebuilds. Skipped during the initial roster stream so partial-snapshot rank transitions can't misfire; only fires for members that existed in the previous roster.
0.0.1 — Initial release
First release of LibGuildRoster-1.0 as a standalone CurseForge library, extracted from its prior home as a vendored copy inside FastGuildInvite. Pre-1.0 versioning while the standalone packaging and external-reference flow are validated end-to-end against a real consumer build.
Library behaviour
- Tracks the WoW guild roster with wipe-and-rebuild semantics — no stale ex-members possible.
GUILD_ROSTER_UPDATEdrives full rebuilds;CHAT_MSG_SYSTEMdrives real-time online / offline / join / leave transitions between rebuilds.- Retries the initial roster fetch up to 5 times at login to handle the
window where
GetNumGuildMembers()returns 0. - Stabilization gate (2 consecutive rebuilds with the same member total)
before
OnRosterReadyfires, preventing partial-snapshot misfires during the retail login roster stream. OnMemberJoinedfires only from the authoritativeCHAT_MSG_SYSTEM"X has joined the guild" message, never from roster diffs.- Recently-left dedup (60 s TTL) prevents stale
GUILD_ROSTER_UPDATEresponses from misfiringOnMemberJoinedfor a player who just left. - On retail, calls
SetGuildRosterShowOffline(true)atPLAYER_LOGINso the rebuilt roster sees the full guild rather than only online members.
Compatibility
- Classic Era (Interface 11508)
- Burning Crusade Classic (Interface 20505)
- Wrath Classic (Interface 30403)
- Cataclysm Classic (Interface 40400)
- Mainline / Retail (Interface 110207, 120001, 120000)
Public API
IsInGuild, IsOnline, GetMember, GetAllMembers, GetOnlineMembers.
Callbacks
OnRosterReady, OnRosterUpdated, OnMemberOnline, OnMemberOffline,
OnMemberJoined, OnMemberLeft.

