SGI 6.1

SuperGuildInvite 7.0

SuperGuildInvite is an AddOn developed to aid any person who wishes to invite new players to their guild

  • If you are here to express your hatred against this type of AddOns, please consider this: GuildShield
  • GuildShield has been updated and now works for everyone on less than 2000ms latency

FAQ - Please read before posting questions!

Can I remove players from my blacklist?

  • No you cannot at this time, and this is intended. There might be some way in the future.
  • As of 6.6 players are locked for a minimum of one month and then removed.

Can I send the whisper before the invite?

  • No. This used to be possible, but blizzard made changes to restrict this. The invite now has to be coupled with a physical action (i.e. a button press or mouseclick) in order to be valid. This can't be changed.

SGI keeps listing Starter Edition accounts. Can I stop that?

  • SGI has no means of recognizing starter editions (There is no function for that at this time). You can prevent this by setting your limits to 21+, though this will make you miss all real accounts at less than level 20.

SGI invites guilded players!

  • This is caused by a bug on blizzards side. When a player goes offline by a dissconnect or closing the WoW window (Not by the normal Logout) they will stay a while in the who interface and appear guildless. This is why SGI thinks they are guildless and tries to invite them.
  • It can also be caused by the fact that someone beat you to it. Players in your list were guildless when found, but when you click on them to invite they might already have been invited by someone else.

My Minimap icon/Frames are missing!

  • You can reset the positions of all SGI frames by /sgi framereset
  • /sgi options should show the options frame. Make sure "Hide Minimap button" is not checked.
  • If you can't see the frame after typing /sgi options, try /sgi reset followed by /sgi options to show the options. Note that this will reset att your settings to default.

The Who window pops up all the time! Help me!

  • This is an issue cause by other AddOns, interfering with SGI. Try disabling other AddOns to see which one is the cause. (WIM is known to cause this)
  • As of 7.0 this issue should be resolved.

Contact Information

If you for some reason need to contact me, you can post here, PM me or send an email to (I prefer email): Please note that I do read every email I recieve even if I don't have time to answer all of them.

  • [email protected]
  • [email protected]

Special Thanks

  • Xara82 For making the SGI instruction video
  • Nephthis - Durotan (EU)(aka Cheshire) For the German translation of SuperGuildInvite, his great dedication to help answering questions about SGI and many great suggestions which has helped to improve SGI tremendously.



SuperScan is the reason to use this AddOn! SuperScan is a function which will methodically go through all logged in players on your server, determine if they belong to a guild and if not they will be put in a waiting list. They stay in this list for four seconds, in order for GuildShield to do its job. They are the placed in your invite queue where you can invite them to your guild by a simple click. SuperScan is also quite. Using the Who Interface in the background lets you go on with your daily business while having a steadily growing invite queue. The time it takes to do a complete scan depends on the settings you choose, but from my experience a scan takes between 5-10 mins.

Inviting Players

In order to invite a player from the invite queue you can do one of three different things:

  1. You can press the button labeled Invite: # to invite the first person in the queue, and the next and so on...
  2. You can assign a keybinding to the invite button, which has the same effect as pressing said button. This is done in the options menu.
  3. Lastly you can use Choose Invites, which is a window that displays all queued players, along with relevant information about them. Now you can simply left click on the players that you wish to invite, and right click to remove them from the queue.

Locking / Blacklisting

Locking is a way for SGI to keep track of which players you already have tried to invite during the last two months. If you have tried to invite a player, and they received the invite, they will be on this list and will not be bothered by you again for at least 2 months. It does not matter if they accepted of declined your invite. Only if the invite did not reach them will they be taken off.

Invite Whisper

You can specify up to 6 different whispers to send randomly to the players you invite. SuperGuildInvite supports 3 modes of inviting players:

  • Whisper after inviting - The invite goes out, SGI determines if it reached the player, and then sends the whisper only if they received your invitation.
  • Invite Only - Only invite, no whisper.
  • WhisperOnly - Only whisper, no invite.


All settings can be changed in the options menu of SuperGuildInvite. In order to access more than limit you need to check Advanced options (/sgi options)

  • Limit - The level range you want to search for, i.e level 10-90 or 80-85 etc.
  • Race - Adds a race filter to the search, starting at the specified level. This divides the searching over the different races, to make sure you don't miss any players due to a high population server. This makes the SuperScan Slower
  • Class - The same as race, except it's for the players class.
  • Interval - Specifies the size of each step in the search. 5 would result in 1-5, 6-10, 11-15 etc.


Filters allow you to remove certain player types from your search. To add a filter do the following:

  1. Open SGI Options
  2. Press Filters
  3. Press Add Filter
  4. Fill out the filter form, read the in game instructions.
  5. Press save If a player matches a filter they will not be added to your queue.

Other useful AddOns

If you are looking for a AddOn to remove players from you guild, then this might be the AddOn for you

You must login to post a comment. Don't have an account? Register to get one!

  • Avatar of Gutitout Gutitout Jul 24, 2014 at 21:57 UTC - 0 likes

    Version 7.2.1 is giving a lot of errors:

    124x Interface\AddOns\SuperGuildInvite\SGI_Blacklist.lua:43: attempt to index field '?' (a nil value)
    Interface\AddOns\SuperGuildInvite\SGI_Blacklist.lua:43: in function `IsSharing'
    ...rface\AddOns\SuperGuildInvite\SGI_System_Message.lua:125: in function `SystemMessage'
    Interface\AddOns\SuperGuildInvite\SGI_Events.lua:128: in function `?'
    Interface\AddOns\SuperGuildInvite\SGI_Events.lua:138: in function <Interface\AddOns\SuperGuildInvite\SGI_Events.lua:137>

    self = <table> {
    RemoveFilter = <function> defined @Interface\AddOns\SuperGuildInvite\SGI_Filter.lua:46
    LoadLocale = <function> defined @Interface\AddOns\SuperGuildInvite\SGI_Core.lua:4
    FormatWhisper = <function> defined @Interface\AddOns\SuperGuildInvite\SuperScan.lua:206
    SystemMessage = <function> defined @Interface\AddOns\SuperGuildInvite\SGI_System_Message.lua:77
    debug = <function> defined @Interface\AddOns\SuperGuildInvite\SGI_Constants.lua:59
    ShareLocks = <function> defined @Interface\AddOns\SuperGuildInvite\SGI_Blacklist.lua:67
    ShowTroubleShooter = <function> defined @Interface\AddOns\SuperGuildInvite\SGI_GUI.lua:1260
    GetPercentageDone = <function> defined @Interface\AddOns\SuperGuildInvite\SGI_GUI.lua:323
    IsLocked = <function> defined @Interface\AddOns\SuperGuildInvite\SGI_Blacklist.lua:53
    StopMassShare = <function> defined @Interface\AddOns\SuperGuildInvite\SGI_Blacklist.lua:37
    RequestSync = <function> defined @Interface\AddOns\SuperGuildInvite\SGI_AddOn_Message.lua:76
    versionChanges = <table> {
    ForceStop = <table> {
    UnlockPlayer = <function> defined @Interface\AddOns\SuperGuildInvite\SGI_Blacklist.lua:63
    ShowChanges = <function> defined @Interface\AddOns\SuperGuildInvite\SGI_GUI.lua:1201
    RemoveShielded = <function> defined @Interface\AddOns\SuperGuildInvite\SuperScan.lua:603
    RemoveOutdatedLocks = <function> defined @Interface\AddOns\SuperGuildInvite\SGI_Blacklist.lua:90
    BroadcastVersion = <function> defined @Interface\AddOns\SuperGuildInvite\SGI_AddOn_Message.lua:64
    libWho = <table> {
    DebugState = <function> defined @Interface\AddOns\SuperGuildInvite\SGI_Constants.lua:65
    TestCharacters = <function> defined @Interface\AddOns\SuperGuildInvite\SGI_Filter.lua:102
    VERSION_MINOR = ".1"
    UnregisterForWhisper = <function> defined @Interface\AddOns\SuperGuildInvite\SuperScan.lua:535
    RegisterForWhisper = <function> defined @Interface\AddOns\SuperGuildInvite\SuperScan.lua:545
    ShowOptions = <function> defined @Interface\AddOns\SuperGuildInvite\SGI_GUI.lua:1658
    ShowMinimapButton = <function> defined @Interface\AddOns\SuperGuildInvite\SGI_GUI.lua:1754
    GetSuperScanETR = <function> defined @Interface\AddOns\SuperGuildInvite\SuperScan.lua:628
    GetNumQueued = <function> defined @Interface\AddOns\SuperGuildInvite\SuperScan.lua:619
    GetSuperScanTimeLeft = <function> defined @Interface\AddOns\SuperGuildInvite\SGI_GUI.lua:333
    print = <function> defined @Interface\AddOns\SuperGuildInvite\SGI_Constants.lua:53
    divideString = <function> defined @Interface\AddOns\SuperGuildInvite\SGI_Core.lua:117
    GetTotalScanTime = <function> defined @Interface\AddOns\SuperGuildInvite\SuperScan.lua:640
    CreateSmallSuperScanFrame = <function> defined @Interface\AddOns\SuperGuildInvite\SGI_GUI.lua:248
    StartSuperScan = <function> defined @Interface\AddOns\SuperGuildInvite\SuperScan.lua:500
    AddonMessage = <function> defined @Interface\AddOns\SuperGuildInvite\SGI_AddOn_Message.lua:20
    CountTable = <function> defined @Interface\AddOns\SuperGuildInvite\SGI_Core.lua:76
    CompareVersions = <function> defined @Interface\AddOns\SuperGuildInvite\SGI_Core.lua:91
    IsScanning = <function> defined @Interface\AddOns\SuperGuildInvite\SuperScan.lua:644
    CommonIssues = <table> {
    HideInviteList = <function> defined @Interface\AddOns\SuperGuildInvite\SGI_GUI.lua:231
    SendGuildInvite = <function> defined @Interface\AddOns\SuperGuildInvite\SuperScan.lua:555
    StopSuperScan = <function> defined @Interface\AddOns\SuperGuildInvite\SuperScan.lua:513
    ShowFilterHandle = <function> defined @Interface\AddOns\SuperGuildInvite\SGI_GUI.lua:1135
    FilterPlayer = <function> defined @Interface\AddOns\SuperGuildInvite\SGI_Filter.lua:178
    PickRandomWhisper = <function> defined @Interface\AddOns\SuperGuildInvite\SuperScan.lua:193
    L = <table> {
    VERSION_MAJOR = "7.2"
    ShowSuperScanFrame = <function> defined @Interface\AddOns\SuperGuildInvite\SGI_GUI.lua:341
    HideMinimapButton = <function> defined @Interface\AddOns\SuperGuildInvite\SGI_GUI.lua:1761
    HideOptions = <function> defined @Interface\AddOns\SuperGuildInvite\SG

  • Avatar of ekd04 ekd04 Jul 14, 2014 at 18:17 UTC - 0 likes

    As a GM, 7.0 has not worked for me in 2 months. Extremely disappointed that I cannot set a level filter that works. I set it to 40:90, then activate the filter but it does not change anything. It still starts out at level 1 where all the fail /gquits are going to happen because they don't like the class they made, or they are on a temp account. At least a level 40, they are probably going to keep leveling up since they spent that much time getting to 40 on it.

    At least give us the option to revert back to the older versions of this addon which were fine.

    Your directions are vague at best and the last version worked just fine if you ask me.

    If it's not broke, don't fix it. Right?

  • Avatar of reaper666735 reaper666735 May 10, 2014 at 13:58 UTC - 0 likes

    same here ;

    8x [ADDON_ACTION_FORBIDDEN] AddOn "SuperGuildInvite" tried to call the protected function "RemoveTalent()". !BugGrabber-r198-release\BugGrabber.lua:552: in function <!BugGrabber\BugGrabber.lua:552> <in C code> Blizzard_TalentUI\Blizzard_TalentUI.lua:10: in function "OnAccept" FrameXML\StaticPopup.lua:3854: in function "StaticPopup_OnClick" <string>:"*:OnClick":1: in function <string>:"*:OnClick":1

    Locals: nil

    i thought taint errors where fixed long ago .......

  • Avatar of Sajakain Sajakain Apr 20, 2014 at 21:00 UTC - 0 likes

    I have also had an issue with changing talents with this addon enabled. I originally thought it to be a compatibility issue with ElvUI and, after a suggestion was made to try just this addon + the standard Blizzard UI, I have confirmed it is, in fact, this addon causing the issue.

    With only SGI enabled, I tried switching talents and here is the LUA error that pops up:

    <<code>> Message: ...rface\AddOns\Blizzard_TalentUI\Blizzard_TalentUI.lua:710: attempt to perform arithmetic on local 'id' (a nil value) Time: 04/16/14 07:43:16 Count: 2 Stack: ...rface\AddOns\Blizzard_TalentUI\Blizzard_TalentUI.lua:710: in function `PlayerTalentFrame_SelectTalent' ...rface\AddOns\Blizzard_TalentUI\Blizzard_TalentUI.lua:40: in function `OnAccept' Interface\FrameXML\StaticPopup.lua:3854: in function `StaticPopup_OnClick' [string "*:OnClick"]:1: in function <[string "*:OnClick"]:1>

    Locals: id = nil (*temporary) = <function> defined =[C]:-1 (*temporary) = nil (*temporary) = nil (*temporary) = nil (*temporary) = nil (*temporary) = "attempt to perform arithmetic on local 'id' (a nil value)"<</code>>

    An update to resolve the issue would be appreciated. Until then, SGI will have to be disabled. :(

  • Avatar of bherold bherold Dec 18, 2013 at 20:43 UTC - 0 likes

    Great addon! Is there a way to dump the memory usage? It's using 40meg, more than all my other addons combined.


  • Avatar of Mazx Mazx Dec 05, 2013 at 17:51 UTC - 0 likes

    I notice this feature ">> When a player joins the guild, the date will be recorded in the officer note." is no longer a part of the addon? or isn't working.

  • Avatar of carterkw carterkw Sep 19, 2013 at 18:31 UTC - 0 likes

    I really like this guild tool. My experience some people will never say yes unless their ask. Of course you have to go through a lot of no to get a yes. If use properly this can be a powerful tool.

    I would like to know if there a way I can set this back up with my own personal message to put the person name in the hello statement.? It did do this on the default message.

    Ex. Hello Dudly Would you like to...................

  • Avatar of catherict catherict Aug 17, 2013 at 18:50 UTC - 0 likes

    ** Also posted on **

    Janniie, instead of just complaining about the bugs, I dove into the code and fixed the issue with unnecessary who queries and duplicates with the following code. I spent several hours testing every possible combination i could think of and debugging what I could. Feel free to comment out (or delete) all the print commands I added for general debugging and informational purposes.
    I also commented out the two lines with
    SGI_DATA[DATA_INDEX].settings.interval = under local SGI_OptionsUpdate to get rid of the always 5 interval I posted about. It seemed unnecessary since it sets interval=5 on new login anyways. I hope this helps you with your project and thank you for the amazing addon!

    local function NewQuery(low,high,int,race,class)
        local ScanIndividualLevel = 85 -- What level to start scanning individually (interval of 1), change with expansion
        local Levels = {}
        local Classes = {
                L["Death Knight"],
        local Races = {}
        local comboTable = {};
        if UnitFactionGroup("player") == "Horde" then
            Races = {
                L["Blood Elf"],
            comboTable = RaceClassCombos["Horde"];
            Races = {
                L["Night Elf"],
            comboTable = RaceClassCombos["Alliance"];
        --Print some general information to the players, repeats the numbers set in GUI
        print("Scanning players with levels "..low.." through "..high.." in increments of "".")
        print("Thorough race scanning begins at level: "..race..".")
        print("Thorough class scanning begins at level : "..class..".")
        if low >= ScanIndividualLevel then
            for i = ScanIndividualLevel,high do
                if race <= i and class <= i then
                    for k,_ in pairs(comboTable) do
                        for j,_ in pairs(comboTable[k]) do
                            tinsert(Levels,i.. " r-"..k.." c-"..comboTable[k][j])
                            print("Added query level "..i.." "..k.." "..comboTable[k][j].." to the que.")
                elseif race <= i then
                    for k,_ in pairs(Races) do
                        tinsert(Levels,i.." r-"..Races[k])
                        print("Added query level "..i.." "..Races[k].." to the que.")
                elseif class <= i then
                    for k,_ in pairs(Classes) do
                        tinsert(Levels,i.." c-"..Classes[k])
                        print("Added query level "..i.." "..Classes[k].." to the que.")
                    print("Added query level "..i.." to the que.")
        elseif low < ScanIndividualLevel then
            local c
            if high > (ScanIndividualLevel-1) then
                c = (ScanIndividualLevel-1) -- sets c to a maximum of ScanIndividualLevel-1 so that the remaining levels get scanned individually
                c = high

            for i = low,c,int do
                local StartLvl = i -- Sets the starting level to i from loop (variable not necessary but makes code easier to follow)
                local EndLvl = StartLvl+int-1 -- Sets the ending level to starting level plus interval (ex. 1 + 5 = 6) then subtracts 1 (ex. 6 - 1 = 5) so scan is 1-5 (5 levels, which is our interval) instead of 1-6 (6 levels, which is NOT our interval)
                if EndLvl > c then
                    EndLvl = c -- Sets the highest EndLvl to c so it doesn't over extend (ex. c = 73, int = 5, it would que "71- -75" but we want it to stop at c)
                if race <= i and class <= i then
                    for k,_ in pairs(comboTable) do
                        for j,_ in pairs(comboTable[k]) do
                            tinsert(Levels,StartLvl.."- -"..EndLvl.. " r-"..k.." c-"..comboTable[k][j])
                            print("Added query levels "..StartLvl.." to "..EndLvl.." "..k.." "..comboTable[k][j].." to the que.")
                elseif race <= i then
                    for k,_ in pairs(Races) do
                        tinsert(Levels,StartLvl.."- -"..EndLvl.." r-"..Races[k])
                        print("Added query levels "..StartLvl.." to "..EndLvl.." "..Races[k].." to the que.")
                elseif class <= i then
                    for k,_ in pairs(Classes) do
                        tinsert(Levels,StartLvl.."- -"..EndLvl.." c-"..Classes[k])
                        print("Added query levels "..StartLvl.." to "..EndLvl.." "..Classes[k].." to the que.")
                    tinsert(Levels,StartLvl.."- -"..EndLvl)
                    print("Added query levels "..StartLvl.." to "..EndLvl.." to the que.")
            if high >= ScanIndividualLevel then
                for i = ScanIndividualLevel,high do
                    if race <= i and class <= i then
                        for k,_ in pairs(comboTable) do
                            for j,_ in pairs(comboTable[k]) do
                                tinsert(Levels,i.. " r-"..k.." c-"..comboTable[k][j])
                                print("Added query level "..i.." "..k.." "..comboTable[k][j].." to the que.")
                    elseif race <= i then
                        for k,_ in pairs(Races) do
                            tinsert(Levels,i.." r-"..Races[k])
                            print("Added query level "..i.." "..Races[k].." to the que.")
                    elseif class <= i then
                        for k,_ in pairs(Classes) do
                            tinsert(Levels,i.." c-"..Classes[k])
                            print("Added query level "..i.." "..Classes[k].." to the que.")
                        print("Added query level "..i.." to the que.")
        whoQueryList = Levels

    Last edited Aug 17, 2013 by catherict
  • Avatar of Voxxel Voxxel Jan 27, 2013 at 17:07 UTC - 0 likes

    2 new versions out and the disturbing autoinvite / autowhisper order is still exists. There's not even a respond for that.

    Still need to switch back the order to the pre-5.x versions, cause players still ragecancel the invites before the whispers fired off to them.

    Last edited Jan 27, 2013 by Voxxel
  • Avatar of Voxxel Voxxel Oct 27, 2012 at 10:27 UTC - 0 likes

    Hey Janniie!

    I had to revert back to use an older version of SuperGuildInvite, simply because the new version is half-time effective as the older ones are.

    When used invite+whisper the new one throw out the invite before the whisper. Players usually decline the invite even before they have a chance to read the recruit message.

    Please make an option to reverse this, people usually accept much better to see the disturbing invite window popup AFTER they're warned by a whisper.


Date created
Jun 21, 2011
Last update
Jul 23, 2014
Development stage
  • enUS
All Rights Reserved
Curse link
Recent files