diff --git a/Heimdall.lua b/Heimdall.lua index d8f42b1..4da42ef 100644 --- a/Heimdall.lua +++ b/Heimdall.lua @@ -8,6 +8,9 @@ local addonname, data = ... -- Maybe even make an alert when someone does too much damage to someone else... -- But that would not be trivial as of now, I can't think of a way to do it sensibly -- TODO: Implement auto grouping via agent, maybe find "+" or something +-- TODO: Implement some sort of automatic grouping feature... +-- Don't know how to elect leader yet... Who invites? +-- Maybe we can just make it agent #6, have him always be the group leader? local function init() ---@class Heimdall_Data @@ -34,6 +37,7 @@ local function init() ---@field Messenger { Init: fun() } ---@field Spotter { Init: fun() } ---@field DeathReporter { Init: fun() } + ---@field Inviter { Init: fun() } --- Config --- ---@class HeimdallConfig @@ -41,6 +45,7 @@ local function init() ---@field who HeimdallWhoConfig ---@field messenger HeimdallMessengerConfig ---@field deathReporter HeimdallDeathReporterConfig + ---@field inviter HeimdallInviterConfig ---@field whisperNotify table ---@field stinkies table @@ -73,6 +78,11 @@ local function init() ---@field zoneOverride string? ---@field duelThrottle number + ---@class HeimdallInviterConfig + ---@field enabled boolean + ---@field listeningChannel string + ---@field keyword string + --- Data --- ---@class HeimdallMessengerData ---@field queue table @@ -114,6 +124,7 @@ local function init() --/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}} data.config = { spotter = { enabled = data.GetOrDefault(Heimdall_Data, { "config", "spotter", "enabled" }, true), @@ -226,6 +237,11 @@ local function init() ["Чмодвенк"] = true, ["Шпек"] = true, }), + inviter = { + 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" }, "+"), + } } data.raceMap = { @@ -314,6 +330,7 @@ local function init() data.Messenger.Init() data.Spotter.Init() data.DeathReporter.Init() + data.Inviter.Init() print("Heimdall loaded!") end diff --git a/Heimdall.toc b/Heimdall.toc index 99e36f9..672747c 100644 --- a/Heimdall.toc +++ b/Heimdall.toc @@ -11,4 +11,5 @@ Spotter.lua Whoer.lua Messenger.lua DeathReporter.lua +Inviter.lua Heimdall.lua \ No newline at end of file diff --git a/Inviter.lua b/Inviter.lua new file mode 100644 index 0000000..fc439f2 --- /dev/null +++ b/Inviter.lua @@ -0,0 +1,53 @@ +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 + + local inviterGroupFrame = CreateFrame("Frame") + 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 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