Add channel messages/notifications
This commit is contained in:
@@ -1,9 +1,9 @@
|
||||
-- TICKER_200
|
||||
function()
|
||||
---@type WHOMessage
|
||||
---@type Message
|
||||
local message = aura_env.messageQueue[1]
|
||||
if message == nil then return end
|
||||
|
||||
table.remove(aura_env.messageQueue, 1)
|
||||
SendChatMessage(message.message, "WHISPER", nil, message.to)
|
||||
SendChatMessage(message.message, message.channel, nil, message.data)
|
||||
end
|
@@ -14,17 +14,13 @@ aura_env.ignored = {"Maritza", "Goodbones"}
|
||||
---@field classColors table<string, string>
|
||||
---@field whoQueries table<number, WHOQuery>
|
||||
---@field ttl number
|
||||
---@field messageQueue WHOMessage[]
|
||||
---@field messageQueue Message[]
|
||||
---@field UpdateMacro fun()
|
||||
---@field Notify fun(Player)
|
||||
---@field NotifyGone fun(Player)
|
||||
---@field queryPending boolean
|
||||
---@field lastQuery WHOQuery
|
||||
|
||||
---@class WHOMessage
|
||||
---@field message string
|
||||
---@field to string
|
||||
|
||||
---@param input string
|
||||
---@return number
|
||||
local function utf8len(input)
|
||||
@@ -130,6 +126,7 @@ aura_env.whoQueries[5] = WHOQuery.new(
|
||||
aura_env.queryPending = false
|
||||
aura_env.lastQuery = nil
|
||||
|
||||
---@type table<string, string>
|
||||
aura_env.raceMap = {
|
||||
["Orc"] = "Horde",
|
||||
["Undead"] = "Horde",
|
||||
@@ -197,6 +194,7 @@ Player = {
|
||||
end
|
||||
}
|
||||
|
||||
---@type table<string, string>
|
||||
aura_env.classColors = {
|
||||
["Warrior"] = "C69B6D",
|
||||
["Paladin"] = "F48CBA",
|
||||
@@ -241,35 +239,96 @@ for i, part in ipairs(notifyForD) do
|
||||
notifyFor[part] = true
|
||||
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",
|
||||
player.name, player.class, player.guild, player.zone, player.firstSeen, player.lastSeen, player.seenCount)
|
||||
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
|
||||
---@return nil
|
||||
aura_env.Notify = function(player)
|
||||
if not notifyFor[player.zone] then
|
||||
return
|
||||
end
|
||||
local msg = aura_env.MakeNotifyMessage(player)
|
||||
for _, rec in ipairs(toNotify) do
|
||||
table.insert(aura_env.messageQueue, {
|
||||
to = rec,
|
||||
message = msg
|
||||
})
|
||||
end
|
||||
local msg = MakeNotifyMessage(player)
|
||||
NotifyAll(msg)
|
||||
end
|
||||
|
||||
---@param player Player
|
||||
---@return nil
|
||||
aura_env.NotifyGone = function(player)
|
||||
if not notifyFor[player.zone] then
|
||||
return
|
||||
end
|
||||
local msg = string.format("%s of class %s and guild %s left %s", player.name, player.class, player.guild,
|
||||
player.zone)
|
||||
for _, rec in ipairs(toNotify) do
|
||||
table.insert(aura_env.messageQueue, {
|
||||
to = rec,
|
||||
message = msg
|
||||
})
|
||||
NotifyAll(msg)
|
||||
end
|
||||
|
||||
-- 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
|
||||
|
||||
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)
|
||||
|
||||
|
Reference in New Issue
Block a user