diff --git a/FreshShit/WhoSniffer/event4.lua b/FreshShit/WhoSniffer/event4.lua index ca39d64..dc199c7 100644 --- a/FreshShit/WhoSniffer/event4.lua +++ b/FreshShit/WhoSniffer/event4.lua @@ -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 \ No newline at end of file diff --git a/FreshShit/WhoSniffer/init.lua b/FreshShit/WhoSniffer/init.lua index 3ea094a..5862d69 100644 --- a/FreshShit/WhoSniffer/init.lua +++ b/FreshShit/WhoSniffer/init.lua @@ -14,17 +14,13 @@ aura_env.ignored = {"Maritza", "Goodbones"} ---@field classColors table ---@field whoQueries table ---@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 aura_env.raceMap = { ["Orc"] = "Horde", ["Undead"] = "Horde", @@ -197,6 +194,7 @@ Player = { end } +---@type table 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) +