diff --git a/Heimdall.lua b/Heimdall.lua index 0589cfd..0043c28 100644 --- a/Heimdall.lua +++ b/Heimdall.lua @@ -82,6 +82,7 @@ local function init() ---@field enabled boolean ---@field listeningChannel string ---@field keyword string + ---@field updateInterval number --- Data --- ---@class HeimdallMessengerData @@ -120,11 +121,13 @@ local function init() data.who = { ignored = {}, } + --/run Heimdall_Data.config = {inviter={enabled=false},deathReporter={enabled=false},spotter={enabled=false,everyone=false}} --/run Heimdall_Data.config = {who={enabled=true},deathReporter={enabled=true},spotter={enabled=true}} --/run Heimdall_Data.config = {deathReporter={enabled=true}} --/run Heimdall_Data.config = {deathReporter={enabled=false},spotter={enabled=false}} --/run Heimdall_Data.config = {deathReporter={enabled=false},spotter={enabled=true,everyone=true}} --/run Heimdall_Data.config = {inviter={enabled=true},deathReporter={enabled=true},spotter={enabled=true,everyone=true}} + --/run Heimdall_Data.config = {inviter={enabled=true,keyword="+++"},deathReporter={enabled=true},spotter={enabled=true,everyone=true}} data.config = { spotter = { enabled = data.GetOrDefault(Heimdall_Data, { "config", "spotter", "enabled" }, true), @@ -171,7 +174,8 @@ local function init() "Растафаркрай", "Frosstmorn", "Pulsjkee", - "Paskoo" + "Paskoo", + "发酸的风景画", }), stinkies = data.GetOrDefault(Heimdall_Data, { "config", "stinkies" }, { ["Ahhahahh"] = true, @@ -236,6 +240,7 @@ local function init() enabled = data.GetOrDefault(Heimdall_Data, { "config", "inviter", "enabled" }, false), listeningChannel = data.GetOrDefault(Heimdall_Data, { "config", "inviter", "listeningChannel" }, "Agent"), keyword = data.GetOrDefault(Heimdall_Data, { "config", "inviter", "keyword" }, "+"), + updateInterval = data.GetOrDefault(Heimdall_Data, { "config", "inviter", "updateInterval" }, 1), } } diff --git a/Inviter.lua b/Inviter.lua index fc439f2..e4c1c0d 100644 --- a/Inviter.lua +++ b/Inviter.lua @@ -9,7 +9,37 @@ function data.Inviter.Init() return end + ---@param channelName string + ---@return table + 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 @@ -18,9 +48,15 @@ function data.Inviter.Init() ConvertToRaid() end - if not IsEveryoneAssistant() then - SetEveryoneIsAssistant(true) + 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")