Files
wow-Heimdall/Inviter.lua

90 lines
2.1 KiB
Lua

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
---@param channelName string
---@return table<string, boolean>
local function GetChannelMembers(channelName)
local channelFrame = _G["ChannelFrame"]
channelFrame:Show()
for i = 1, 40 do
local button = _G["ChannelButton" .. i]
if not button then break end
local text = button:GetText()
if text == channelName then
button:Click()
break
end
end
local index = GetSelectedDisplayChannel()
local count = select(5, GetChannelDisplayInfo(index))
local res = {}
for i = 1, count do
local name = GetChannelRosterInfo(index, i)
if name then
res[name] = true
end
end
channelFrame:Hide()
return res
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(GetChannelMembers(data.config.inviter.listeningChannel)) 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