local addonname, data = ... ---@cast data HeimdallData ---@cast addonname string data.Inviter = {} function data.Inviter.Init() if not data.config.inviter.enabled then print("Heimdall - Inviter disabled") return end ---@type table local channelMembers = {} local channelRosterFrame = CreateFrame("Frame") channelRosterFrame:RegisterEvent("CHANNEL_ROSTER_UPDATE") channelRosterFrame:SetScript("OnEvent", function(self, event, index) local count = select(5, GetChannelDisplayInfo(index)) channelMembers = {} for i = 1, count do local name = GetChannelRosterInfo(index, i) if name then channelMembers[name] = true end end end) ---@param channelName string ---@return table local function UpdateChannelMembers(channelName) local friendsFrame = _G["FriendsFrame"] local channelFrame = _G["ChannelFrame"] OpenFriendsFrame() _G["FriendsFrameTab3"]:Click() _G["ChannelButton2"]:Click() for i = 1, 40 do local button = _G["ChannelButton" .. i] if not button then break end local text = button:GetText() if string.find(text, channelName) then button:Click() break end end channelFrame:Hide() friendsFrame:Hide() return channelMembers end C_Timer.NewTicker(30, function() UpdateChannelMembers(data.config.inviter.listeningChannel) end) -- print("pls joomp") -- hooksecurefunc("JumpOrAscendStart", function() -- print("JOOMP") -- UpdateChannelMembers(data.config.inviter.listeningChannel) -- local foo = channelMembers -- for name, _ in pairs(foo) do -- print(name) -- end -- end) local inviterGroupFrame = CreateFrame("Frame") local nextUpdate = 0 inviterGroupFrame:RegisterEvent("GROUP_ROSTER_UPDATE") inviterGroupFrame:SetScript("OnEvent", function(self, event, ...) if not UnitIsGroupLeader("player") then return end if not IsInRaid() then ConvertToRaid() end if nextUpdate >= GetTime() then return end nextUpdate = GetTime() + data.config.inviter.updateInterval for name, _ in pairs(channelMembers) do PromoteToAssistant(name, true) end -- if not IsEveryoneAssistant() then -- SetEveryoneIsAssistant(true) -- end end) local inviterChannelFrame = CreateFrame("Frame") inviterChannelFrame:RegisterEvent("CHAT_MSG_CHANNEL") inviterChannelFrame:SetScript("OnEvent", function(self, event, msg, sender, ...) 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 ~= data.config.inviter.listeningChannel then return end if msg == data.config.inviter.keyword then InviteUnit(sender) end end) print("Heimdall - Inviter loaded") end