Add channel messages/notifications

This commit is contained in:
2024-11-28 16:19:59 +01:00
parent 55edf58a68
commit b30a0a7c94
2 changed files with 79 additions and 20 deletions

View File

@@ -1,9 +1,9 @@
-- TICKER_200 -- TICKER_200
function() function()
---@type WHOMessage ---@type Message
local message = aura_env.messageQueue[1] local message = aura_env.messageQueue[1]
if message == nil then return end if message == nil then return end
table.remove(aura_env.messageQueue, 1) table.remove(aura_env.messageQueue, 1)
SendChatMessage(message.message, "WHISPER", nil, message.to) SendChatMessage(message.message, message.channel, nil, message.data)
end end

View File

@@ -14,17 +14,13 @@ aura_env.ignored = {"Maritza", "Goodbones"}
---@field classColors table<string, string> ---@field classColors table<string, string>
---@field whoQueries table<number, WHOQuery> ---@field whoQueries table<number, WHOQuery>
---@field ttl number ---@field ttl number
---@field messageQueue WHOMessage[] ---@field messageQueue Message[]
---@field UpdateMacro fun() ---@field UpdateMacro fun()
---@field Notify fun(Player) ---@field Notify fun(Player)
---@field NotifyGone fun(Player) ---@field NotifyGone fun(Player)
---@field queryPending boolean ---@field queryPending boolean
---@field lastQuery WHOQuery ---@field lastQuery WHOQuery
---@class WHOMessage
---@field message string
---@field to string
---@param input string ---@param input string
---@return number ---@return number
local function utf8len(input) local function utf8len(input)
@@ -130,6 +126,7 @@ aura_env.whoQueries[5] = WHOQuery.new(
aura_env.queryPending = false aura_env.queryPending = false
aura_env.lastQuery = nil aura_env.lastQuery = nil
---@type table<string, string>
aura_env.raceMap = { aura_env.raceMap = {
["Orc"] = "Horde", ["Orc"] = "Horde",
["Undead"] = "Horde", ["Undead"] = "Horde",
@@ -197,6 +194,7 @@ Player = {
end end
} }
---@type table<string, string>
aura_env.classColors = { aura_env.classColors = {
["Warrior"] = "C69B6D", ["Warrior"] = "C69B6D",
["Paladin"] = "F48CBA", ["Paladin"] = "F48CBA",
@@ -241,35 +239,96 @@ for i, part in ipairs(notifyForD) do
notifyFor[part] = true notifyFor[part] = true
end end
aura_env.MakeNotifyMessage = function(player) ---@param player Player
---@return string
local MakeNotifyMessage = function(player)
return string.format("%s of class %s and guild %s in %s, first seen: %s, last seen: %s, times seen: %d", return string.format("%s of class %s and guild %s in %s, first seen: %s, last seen: %s, times seen: %d",
player.name, player.class, player.guild, player.zone, player.firstSeen, player.lastSeen, player.seenCount) player.name, player.class, player.guild, player.zone, player.firstSeen, player.lastSeen, player.seenCount)
end end
---@param msg string
local NotifyAll = function(msg)
for _, rec in ipairs(toNotify) do
---@type Message
local message = {
channel = "WHISPER",
data = rec,
message = msg
}
table.insert(aura_env.messageQueue, message)
end
end
---@param player Player ---@param player Player
---@return nil
aura_env.Notify = function(player) aura_env.Notify = function(player)
if not notifyFor[player.zone] then if not notifyFor[player.zone] then
return return
end end
local msg = aura_env.MakeNotifyMessage(player) local msg = MakeNotifyMessage(player)
for _, rec in ipairs(toNotify) do NotifyAll(msg)
table.insert(aura_env.messageQueue, {
to = rec,
message = msg
})
end
end end
---@param player Player ---@param player Player
---@return nil
aura_env.NotifyGone = function(player) aura_env.NotifyGone = function(player)
if not notifyFor[player.zone] then if not notifyFor[player.zone] then
return return
end end
local msg = string.format("%s of class %s and guild %s left %s", player.name, player.class, player.guild, local msg = string.format("%s of class %s and guild %s left %s", player.name, player.class, player.guild,
player.zone) player.zone)
for _, rec in ipairs(toNotify) do NotifyAll(msg)
table.insert(aura_env.messageQueue, { end
to = rec,
message = msg -- CHANNEL fuckery
}) local channel = aura_env.config.channelName or "foobar"
local channelId = nil
local function GetChannelId(channelName)
local channels = {GetChannelList()}
for i = 1, #channels, 2 do
local id = channels[i]
local name = channels[i + 1]
if name == channelName then
return id
end
end end
end end
channelId = GetChannelId(channel)
if not channelId then
print(string.format("channel %s not found, joining", channel))
JoinPermanentChannel(channel)
end
channelId = GetChannelId(channel)
print(string.format("channel %s resolved to id %d", channel, channelId))
---@param msg string
local NotifyChannel = function(msg)
if not channelId then
print("cannot notify channel, channelId is nil")
return
end
local message = {
channel = "CHANNEL",
data = channelId,
message = msg
}
table.insert(aura_env.messageQueue, message)
end
---@param player Player
---@return nil
aura_env.NotifyChannel = function(player)
local msg = MakeNotifyMessage(player)
NotifyChannel(msg)
end
---@param player Player
---@return nil
aura_env.NotifyChannelGone = function(player)
local msg = string.format("%s of class %s and guild %s left %s", player.name, player.class, player.guild,
player.zone)
NotifyChannel(msg)
end
local foo = Player.new("foo", "bar", "Human", "Warrior", "Orgrimmar")
aura_env.NotifyChannel(foo)