Implement inviter

This commit is contained in:
2024-12-16 01:04:28 +01:00
parent 8e1f2c147e
commit 6bf1c491a0
3 changed files with 71 additions and 0 deletions

View File

@@ -8,6 +8,9 @@ local addonname, data = ...
-- Maybe even make an alert when someone does too much damage to someone else... -- 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 -- 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 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() local function init()
---@class Heimdall_Data ---@class Heimdall_Data
@@ -34,6 +37,7 @@ local function init()
---@field Messenger { Init: fun() } ---@field Messenger { Init: fun() }
---@field Spotter { Init: fun() } ---@field Spotter { Init: fun() }
---@field DeathReporter { Init: fun() } ---@field DeathReporter { Init: fun() }
---@field Inviter { Init: fun() }
--- Config --- --- Config ---
---@class HeimdallConfig ---@class HeimdallConfig
@@ -41,6 +45,7 @@ local function init()
---@field who HeimdallWhoConfig ---@field who HeimdallWhoConfig
---@field messenger HeimdallMessengerConfig ---@field messenger HeimdallMessengerConfig
---@field deathReporter HeimdallDeathReporterConfig ---@field deathReporter HeimdallDeathReporterConfig
---@field inviter HeimdallInviterConfig
---@field whisperNotify table<string, string> ---@field whisperNotify table<string, string>
---@field stinkies table<string, boolean> ---@field stinkies table<string, boolean>
@@ -73,6 +78,11 @@ local function init()
---@field zoneOverride string? ---@field zoneOverride string?
---@field duelThrottle number ---@field duelThrottle number
---@class HeimdallInviterConfig
---@field enabled boolean
---@field listeningChannel string
---@field keyword string
--- Data --- --- Data ---
---@class HeimdallMessengerData ---@class HeimdallMessengerData
---@field queue table<string, Message> ---@field queue table<string, Message>
@@ -114,6 +124,7 @@ local function init()
--/run Heimdall_Data.config = {deathReporter={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=false}}
--/run Heimdall_Data.config = {deathReporter={enabled=false},spotter={enabled=true,everyone=true}} --/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 = { data.config = {
spotter = { spotter = {
enabled = data.GetOrDefault(Heimdall_Data, { "config", "spotter", "enabled" }, true), enabled = data.GetOrDefault(Heimdall_Data, { "config", "spotter", "enabled" }, true),
@@ -226,6 +237,11 @@ local function init()
["Чмодвенк"] = true, ["Чмодвенк"] = true,
["Шпек"] = 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 = { data.raceMap = {
@@ -314,6 +330,7 @@ local function init()
data.Messenger.Init() data.Messenger.Init()
data.Spotter.Init() data.Spotter.Init()
data.DeathReporter.Init() data.DeathReporter.Init()
data.Inviter.Init()
print("Heimdall loaded!") print("Heimdall loaded!")
end end

View File

@@ -11,4 +11,5 @@ Spotter.lua
Whoer.lua Whoer.lua
Messenger.lua Messenger.lua
DeathReporter.lua DeathReporter.lua
Inviter.lua
Heimdall.lua Heimdall.lua

53
Inviter.lua Normal file
View File

@@ -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