File Details
FastGuildInvite-v1.7.8
- R
- Apr 16, 2026
- 5.32 MB
- 834
- 12.0.1+6
- Retail + 2
File Name
FastGuildInvite-FastGuildInvite-v1.7.8.zip
Supported Versions
- 12.0.1
- 12.0.0
- 11.2.7
- 4.4.0
- 3.4.3
- 2.5.5
- 1.15.8
<FGI> FastGuildInvite
[v1.7.7] (2026-04-14) - Combat Sync Fix, Anti-Spam Accuracy, Scan State Cleanup
Bug Fixes
- TBC:
Sync failed: disconnectedspam and screen stutter during combat (SYNC-016) —getTableHash()andgetTotalHash()each calledIsInCombat(true), which invokedSync.closeConnect()as a side effect of computing a hash; the resulting CLOSED-state reset left a wandering 10-second timer that re-killed any new sync started 1 second later, looping indefinitely; every closeConnect cascade (ChatThrottleLib flush + timer cancel + chat print + UI refresh) ran synchronously inCHAT_MSG_ADDON OnEvent, dropping a frame on each cycle; removed theIsInCombatlocal function entirely; combat is now checked only atfn.startSync()entry viaUnitAffectingCombat("player"), which prevents initiating a new sync in combat without ever aborting an in-flight one - Stale scan results from previous sessions caused invites to offline players (SCAN-006) —
saveSearchwrote the entireaddon.searchtable (includinginviteList) to SavedVariables after every WHO callback and restored it on login; WHO results are an online-only snapshot with no value after the session ends, and WoW provides no reliable way to distinguish/reloadfrom logout, so players who logged off hours ago could remain in the queue and receive broken invite attempts; removedsaveSearchentirely —addon.searchis now always freshly initialised on login; the corresponding Settings checkbox, AceDB default, and analytics call are also removed - Offline players added to anti-spam list; players never added on Classic Era;
not_foundcleanup incorrect on cluster realms (SCAN-007) —fn:rememberPlayer()was called beforeGuildInvite()returned, writing failed invites to the anti-spam list; on Classic EraERR_GUILD_INVITE_Sis never sent to the inviter's client so the original"invite"-only handler never fired and players were never added to the list at all;not_foundcleanup usednormalizePlayerNameon the bare server name which is a no-op on Classic, missing a cluster-realm key like"Name-OtherRealm"; addedaddon.pendingInviteskeyed bynormalizePlayerName(playerName); types 1/2/4 deferrememberPlayerto server confirmation;"decline"and"auto_decline"handlers now also flushpendingInvites(covering Classic Era);not_foundusesnext(pendingInvites)since only one invite can be in-flight at a time
[v1.7.6] (2026-04-13) - Retail Anti-Spam & Invite Fixes
Bug Fixes
- Retail: anti-spam list silently cleared after every same-realm invite (SCAN-004) — on Retail,
C_GuildInfo.InviteandC_ChatInfo.SendChatMessagereject"Name-MyRealm"for same-realm players and fire anot_founderror event;scanFrame.pausePlayFilterwas handling that event by deletingDB.realm.alreadySended[normalizedName], erasing the entry thatrememberPlayer()had just written; only cross-realm players (~1 in 10 WHO results) were stored correctly because their realm suffix was already different; fixed by stripping the self-realm suffix inAPI.GuildInvite()andfn:sendWhisper()before calling the WoW API on Retail so the API call succeeds and nonot_foundevent is raised - Retail:
blackListAutoKickcrashes on every guild join (SCAN-005) —fn:blackListAutoKick()registered aCHAT_MSG_SYSTEMlistener that calledstrfind(ERR_GUILD_JOIN_S, ...)directly, the same protected C-side string that caused the v1.7.5 crash in the main handler; the auto-kick handler was missed in that fix; now guarded withnot gv.isRetailand falls through to the same English text-pattern fallback used by the main handler - Anti-Spam List panel not refreshing in real time (UI-003) —
fn:rememberPlayer()wrote toDB.realm.alreadySendedbut never notified the panel; entries were only visible after switching settings tabs;rememberPlayer()now callsantiSpamList:update()immediately when the panel is visible;settings.ShowContent()also callsupdate()when either the Anti-Spam List or Blacklist tab is opened so bulk sync arrivals are reflected without a second tab switch - Anti-spam timestamps always show
:00for minutes and seconds (UI-002) —fn.getTime()calledtime({year, month, day, hour})withminandsecomitted; Lua'stime()defaults omitted fields to0, so every stored timestamp wasHH:00:00;minandsecare now included
[v1.7.5] (2026-04-13) - Retail Secret String Crash Fix
Bug Fixes
- Lua crash on guild join in Retail —
ERR_GUILD_JOIN_Sis a protected C-side "secret string" in Retail WoW; callingstrfind()on it raisedattempt to perform string conversion on a secret string value(642 times per session per report); the ClassicERR_GUILD_JOIN_Spath is now skipped on Retail, which already has a working fallback pattern match for the "has joined the guild" message
[v1.7.4] (2026-04-13) - Add to Blacklist from Anti-Spam List
New Features
- Add to Blacklist from Anti-Spam List — right-clicking a player name in the Anti-Spam List window now shows an "Add to Blacklist" option alongside the existing Delete option; adds the player to the blacklist (with the configured default reason, chat confirmation, and sync propagation) while leaving them in the anti-spam list unchanged
Bug Fixes
- Blank "Add to Blacklist" button text — the locale key
"Добавить в черный список"was missing fromruRU.lua, which is the master key source for the locale merge insummary.lua; all keys absent fromruRUare silently omitted from the finalLtable, causing the button to display no text
[v1.7.3] (2026-04-13) - Scan Window Resize Fix
Bug Fixes
- Scan window resize clears player display (SCAN-003) — resizing the scan frame while a scan was running caused the player name label to go blank and the invite count to disappear, causing missed invitations; the
OnSizeChangedhook now callsonListUpdate()after each size event to re-sync the display withinviteList
[v1.7.2] (2026-04-11) - Sync Stability & Multi-Peer Queue
Bug Fixes
- Sync sender false failure message (SYNC-014) — the peer who sent data during a sync always received a red failure message in chat even when the sync completed successfully;
CLOSE_CONNECTreceived while in CHECK state is now correctly treated as a clean success - Second peer disrupts in-progress sync (SYNC-015) — a competing
initSyncfrom a second peer while already syncing caused the first sync to be torn down mid-handshake; the second peer is now refused gracefully and queued - Sync queue implementation — refused peers are added to
Sync.queue; when the current session ends, a re-broadcast is triggered automatically so every online peer eventually gets synced without manual intervention - Nil crash in
onSyncSuccess(SYNC-014 follow-up) — automatic login sync triggeredonSyncSuccesswithoutonSyncStartedever being called, leavingsyncPreCounts.blackListnil and causing a Lua arithmetic error; count diff is now skipped whensyncPreCountswas not initialised
[v1.7.1] (2026-04-11) - Settings Tab Highlight & Sync Feedback
New Features
- Active settings tab highlight — the left-hand navigation buttons in the Settings window now visually indicate which panel is currently open; the active button stays highlighted using WoW's native
LockHighlight/UnlockHighlightbutton methods - Sync status messages — pressing the Sync button now prints status messages to the default chat frame with the
<FGI>prefix; messages are suppressed when "Disable addon messages" is enabled- Yellow
Syncing...on broadcast - Green
Synced with <player> (+N entries)or(already up to date)on success - Red
Sync failed: <player> disconnectedon timeout or mid-sync disconnect - Grey
Already up to date.when no guild peer responded to the broadcast
- Yellow
Bug Fixes
- False sync failure message on sender side —
CLOSE_CONNECTreceived while in CHECK state is now treated as a successful close; previously the sending peer always printed a failure message even when the sync completed normally
[v1.7.0] (2026-04-10) - Blacklist Sync Overhaul & Class Filter Fix
New Features
- Blacklist removal propagation — removing a player from the blacklist now syncs the removal to all online guild peers; a
blackListRemovedtombstone table tracks deletions so removed entries are never re-synced back by peers - Auto-broadcast on blacklist removal — triggers an immediate guild hash broadcast when a player is removed so online peers sync without requiring relog or manual sync
Bug Fixes
- Bidirectional cursor desync (SYNC-008) — the
choose_tableresponder was incorrectly sendingchoose_tableback, causing both peers to advance their cursors independently and compare the wrong tables against each other - Re-add clears tombstone — re-adding a previously removed player now correctly clears their tombstone so the re-addition propagates to peers
- Double-delete required to remove (SYNC-010) —
fn:blacklistRemovenow deletes the exact stored key before case variants, so a single remove always works - Lua nil errors on blacklist operations (SYNC-011) —
Sync,checkSync, andCHANNEL_MODare now forward-declared at the top offunctions.lua; they were previously nil when referenced by functions defined before the sync section - Blacklist UI not refreshing after sync (SYNC-012) — the blacklist panel now updates immediately when entries are added or removed via sync
- Class filter checkboxes version-gated — Death Knight filter shown for Wrath/Cata/Retail; Monk, Demon Hunter, and Evoker filters shown for Retail only; previously these checkboxes were absent on non-Classic-Era clients causing incorrect filter results
- Window resize minimum bounds (UI-001) — scan frame minimum resize now tracks actual visible content so it cannot be squished below its contents; main frame minimum width set to prevent the level range controls from overflowing the frame border; scan frame children (player label, progress bar) now resize with the frame
[v1.6.3] (2026-04-06) - Blacklist Sync & Manual Sync Button
New Features
- Blacklist Sync Between FGI Users —
DB.realm.blackListis now included in the peer-to-peer sync system alongside the leave and invited lists; hashes automatically on login and syncs when a mismatch is detected - Manual Sync Button — "Start Sync" button added to FGI Settings → Main tab; triggers a guild-wide hash broadcast and full sync handshake on demand without relogging
Changes
- Refactored login sync init into
fn.startSync()so it can be called externally (login and button share the same code path)
[v1.6.2] (2026-03-29) - Performance Fixes & Blacklist Auto-Advance
New Features
- Auto-advance invite queue after blacklisting — right-clicking to blacklist a player from the scan frame now automatically advances to the next candidate (both fast-blacklist and popup-confirmation paths)
Bug Fixes
- GuildRoster storm —
GuildRoster()is now guarded behind the note-setting check; was being called on every guild join even when note-setting was disabled - Ticker accumulation —
C_Timer.NewTickerintimeCallbackStartnow cancels the prior ticker before creating a new one, preventing N simultaneous tickers after N scan cycles removeMsgListmemory leak — matched entries are now removed and empty per-player slots are nilled instead of accumulating indefinitely
[v1.6.1] (2026-03-29) - Settings & Auto-Blacklist Fixes
Bug Fixes
- Duplicate blacklistOfficer checkbox — removed orphaned copy from the Main settings tab; canonical copy remains in the Guild tab
- False "player is in guild" popup — when auto-blacklisting a leaver, the roster scan (
blacklistKick) is now skipped viaskipKick=true, preventing a false positive popup for a player who just left
[v1.6.0] (2026-03-29) - Anti-Spam List UI & Auto-Blacklist Leavers
New Features
- Anti-Spam List Management UI — new settings tab to view and manage the invited-players list (
DB.realm.alreadySended)- Paginated display (13 entries per page) with player names and invitation timestamps
- Right-click context menu to remove individual players
- "Clear All" button with confirmation dialog
- Integrated with "Player memorization time" auto-cleanup setting
- Fully localized (English & Russian)
- Access via FGI Settings → "Anti-Spam List"
- Auto-blacklist leavers (all versions) —
CHAT_MSG_SYSTEMhandler now triggers auto-blacklist for all game versions;GUILD_EVENT_LOG_UPDATEregistered for all versions
Bug Fixes
blacklistOfficernot persisting — Guild tab setting now correctly saves and restores across sessions- Statistics period dropdown not saving — period selection now persists across reloads
processGuildEventLogcrash on Retail — now usesC_GuildInfo.GetGuildEventLog()on Retail instead of the missing global
[v1.5.19-beta] (2026-03-28) - Blacklist Auto-Kick Fixes
Bug Fixes
- Hook stacking on right-click (BL-001) —
AddHookClick()was called on every page turn inblackList:update(), stackingOnMouseDownhandlers and causing multiple context menus per right-click - Auto-kick never calling
GuildUninvite(BL-002) —FGI_BLACKLISTpopupOnAcceptnow correctly callsGuildUninvite(name); button labels updated to Kick/Skip;OnCanceladded to dequeue and advance
[v1.5.18-beta] (2026-03-27) - Remember Skipped Players
New Features
- "Remember skipped players" setting — when enabled, clicking Skip/Decline adds the player to the anti-spam list so they won't appear in future scans; defaults to off
- Right-click player name in scan frame — opens the FGI context menu (Guild Invite / Blacklist / Unblacklist), same as chat name right-click
[v1.5.17] (2026-03-27) - TBC/Wrath/Cata GuildRoster Fix
Bug Fixes
- Crash on guild join in TBC/Wrath/Cata (KEY-017) —
GuildRoster()global only exists in Classic Era; all other versions now correctly useC_GuildInfo.GuildRoster()
[v1.5.16] (2026-03-21) - Retail Guild Note Support
New Features
- Retail note-setting —
GuildRosterSetPublicNote/GuildRosterSetOfficerNoteconfirmed working in Retail; guild note controls fully functional on all versions
Bug Fixes
message()global missing in Retail (KEY-010/011) — replaced withaddon.API.ShowMessage()which falls back toUIErrorsFrame:AddMessage()on Retailfn.debugformat string crash — format string had 3%splaceholders but only 2 arguments; fixed missing|rreset argFGI_APICompatdebug calls using colon syntax — causedself(the functions table) to be passed as the message argument, triggering the error path every time- Guild join note: stale roster data —
GuildRoster()is now requested immediately on join so the member appears in cache beforesetNoteruns 5 seconds later - Note condition always true — was checking
DB.global.setNote ~= ""(boolean vs string); now correctly checksDB.global.noteText ~= "" GetNumGuildMembers()multi-return (KEY-016) — wrapped in parentheses to prevent the online-count being used as a loop step
[v1.5.13] (2026-03-20) - Retail Note API & Sync Fix
Bug Fixes
- Guild notes crash on Retail (KEY-014) —
SetPublicNote/SetOfficerNotenow useC_GuildInfo.SetNotewith correctisPublicNoteboolean on Retail C_GuildInfo.CanEditPublicNotemissing in Retail (KEY-012) — nil-guarded; returnstruewhen absent, deferring permission check to the server
[v1.5.12] (2026-03-19) - Sync De-taint & Stability
Bug Fixes
- Tainted sender string crash in Retail (KEY-013) —
senderinCHAT_MSG_ADDONis a Blizzard-protected secret string in Retail; replaced:match()withAmbiguate(sender, "none")to safely de-taint it Sync.timeout.timernil crash — added nil guards inrestoreSyncDefaultValues()andSync.timeout.stop()before calling:Cancel()- BCC interface line added to base TOC; CurseForge TOC creation re-enabled for multi-version packaging
[v1.5.8] (2026-03-13) - Multi-Version TOC
New Features
- TBC, Wrath, Cata Classic TOC files — created
FastGuildInvite_BCC.toc,FastGuildInvite_Wrath.toc,FastGuildInvite_Cata.tocfor proper CurseForge multi-version packaging
[v1.5.7] (2026-03-11) - Filter UI & Tooltip Fixes
Bug Fixes
- Fixed multi-line tooltip rendering in GUI widgets (FilterButton, TCheckBox, TLabel, TKeybinding)
- Fixed
FilterButtontooltip not displaying due to missing widget property - Fixed nil
letterFiltercausing tooltip errors inFiltersUpdate - Fixed
fn:split()nil crash - Improved spacing in filter creation UI (RaidProgress labels, bottom hint text)
- Localized new tooltips in English and Russian
[129] (2024-09-22)
- chat menu fix