local addonname, shared = ... ---@cast shared HeimdallShared ---@cast addonname string ---@diagnostic disable-next-line: missing-fields shared.Inviter = {} function shared.Inviter.Init() ---@type Timer local updateTimer = nil local function FixGroup() if not IsInRaid() then ConvertToRaid() end if Heimdall_Data.config.inviter.allAssist then SetEveryoneIsAssistant() end --shared.dumpTable(Heimdall_Data.config.inviter) if Heimdall_Data.config.inviter.agentsAssist then --shared.dumpTable(Heimdall_Data.config.agents) for name, _ in pairs(Heimdall_Data.config.agents) do if UnitInParty(name) and not UnitIsGroupLeader(name) and not UnitIsRaidOfficer(name) then print("Promoting " .. name .. " to assistant") PromoteToAssistant(name, true) end end end end local inviterGroupFrame = CreateFrame("Frame") inviterGroupFrame:RegisterEvent("GROUP_ROSTER_UPDATE") inviterGroupFrame:SetScript("OnEvent", function(self, event, ...) if not Heimdall_Data.config.inviter.enabled then return end if not UnitIsGroupLeader("player") then return end if updateTimer then updateTimer:Cancel() end updateTimer = C_Timer.NewTimer(Heimdall_Data.config.inviter.throttle, FixGroup) end) local inviterChannelFrame = CreateFrame("Frame") inviterChannelFrame:RegisterEvent("CHAT_MSG_CHANNEL") inviterChannelFrame:SetScript("OnEvent", function(self, event, msg, sender, ...) if not Heimdall_Data.config.inviter.enabled then return end local channelId = select(6, ...) local channelname = "" ---@type any[] local channels = { GetChannelList() } for i = 1, #channels, 2 do ---@type number local id = channels[i] ---@type string local name = channels[i + 1] if id == channelId then channelname = name end end if channelname ~= Heimdall_Data.config.inviter.listeningChannel then return end if msg == Heimdall_Data.config.inviter.keyword then InviteUnit(sender) end end) print("Heimdall - Inviter loaded") end