diff --git a/Heimdall.lua b/Heimdall.lua index c8411d7..2e15858 100644 --- a/Heimdall.lua +++ b/Heimdall.lua @@ -93,23 +93,6 @@ local function init() ---@field locale string ---@field debug boolean - --- Data --- - ---@class HeimdallMessengerData - ---@field queue table - ---@field ticker Timer? - - ---@class HeimdallNetworkMessengerData - ---@field queue table - ---@field ticker Timer? - - ---@class HeimdallWhoData - ---@field updateTicker Timer? - ---@field whoTicker Timer? - ---@field ignored table - - ---@class HeimdallStinkyCacheData - ---@field stinkies table - shared.GetOrDefault = function(table, keys, default) local value = default if not table then return value end @@ -129,13 +112,6 @@ local function init() return value end - shared.messenger = { - queue = {}, - } - shared.who = { - ignored = {}, - } - --/run Heimdall_Data.config.who.queries="g-\"БеспредеЛ\"|ally" Heimdall_Data.config = { debug = shared.GetOrDefault(Heimdall_Data, { "config", "debug" }, false), diff --git a/Modules/Messenger.lua b/Modules/Messenger.lua index 3c6597d..1c605d1 100644 --- a/Modules/Messenger.lua +++ b/Modules/Messenger.lua @@ -7,6 +7,10 @@ local ModuleName = "Messenger" ---@field debug boolean ---@field interval number +---@class HeimdallMessengerData +---@field queue ReactiveValue> +---@field ticker Timer? + ---@class Message ---@field message string ---@field channel string @@ -14,7 +18,13 @@ local ModuleName = "Messenger" ---@class Messenger shared.Messenger = { + ---@param message Message + Enqueue = function(message) table.insert(shared.messenger.queue, message) end, Init = function() + shared.messenger = { + queue = ReactiveValue.new({}), + } + local function FindOrJoinChannel(channelName, password) local channelId = GetChannelName(channelName) if channelId == 0 then @@ -34,14 +44,15 @@ shared.Messenger = { return channelId end - ---@diagnostic disable-next-line: missing-fields - if not shared.messenger then shared.messenger = {} end - if not shared.messenger.queue then shared.messenger.queue = {} end if not shared.messenger.ticker then local function DoMessage() if Heimdall_Data.config.messenger.debug then print( - string.format("[%s] Processing message queue - Size: %d", ModuleName, #shared.messenger.queue) + string.format( + "[%s] Processing message queue - Size: %d", + ModuleName, + #shared.messenger.queue:get() + ) ) end @@ -53,7 +64,7 @@ shared.Messenger = { end ---@type Message - local message = shared.messenger.queue[1] + local message = shared.messenger.queue:get()[1] if not message then if Heimdall_Data.config.messenger.debug then print(string.format("[%s] Message queue empty", ModuleName)) @@ -61,65 +72,51 @@ shared.Messenger = { return end - if Heimdall_Data.config.messenger.debug then - print( - string.format( - "[%s] Processing message - Channel: %s, Data: %s", - ModuleName, - message.channel or "nil", - message.data or "nil" - ) - ) - print(string.format("[%s] Message content: %s", ModuleName, message.message or "nil")) - end + if Heimdall_Data.config.messenger.debug then shared.dumpTable(message, "[%s] Processing message:") end if not message.message or message.message == "" then if Heimdall_Data.config.messenger.debug then - print(string.format("[%s] Invalid message: empty content", ModuleName)) + shared.dumpTable(message, string.format("[%s] Invalid message: empty content", ModuleName)) end return end if not message.channel or message.channel == "" then if Heimdall_Data.config.messenger.debug then - print(string.format("[%s] Invalid message: no channel specified", ModuleName)) + shared.dumpTable( + message, + string.format("[%s] Invalid message: no channel specified", ModuleName) + ) end return end if string.find(message.channel, "^C") then if Heimdall_Data.config.messenger.debug then - print(string.format("[%s] Converting channel type from C to CHANNEL", ModuleName)) + shared.dumpTable( + message, + string.format("[%s] Converting channel type from C to CHANNEL", ModuleName) + ) end message.channel = "CHANNEL" elseif string.find(message.channel, "^W") then if Heimdall_Data.config.messenger.debug then - print(string.format("[%s] Converting channel type from W to WHISPER", ModuleName)) + shared.dumpTable( + message, + string.format("[%s] Converting channel type from W to WHISPER", ModuleName) + ) end message.channel = "WHISPER" end if message.channel == "CHANNEL" and message.data and string.match(message.data, "%D") then if Heimdall_Data.config.messenger.debug then - print( - string.format( - "[%s] Processing channel message: '%s' to '%s'", - ModuleName, - message.message, - message.data - ) - ) + shared.dumpTable(message, string.format("[%s] Processing channel message:", ModuleName)) end local channelId = GetChannelName(message.data) if channelId == 0 then if Heimdall_Data.config.messenger.debug then - print( - string.format( - "[%s] Channel not found, attempting to join: %s", - ModuleName, - message.data - ) - ) + shared.dumpTable(message, string.format("[%s] Channel not found, joining:", ModuleName)) end channelId = FindOrJoinChannel(message.data) if Heimdall_Data.config.messenger.debug then @@ -132,43 +129,38 @@ shared.Messenger = { table.remove(shared.messenger.queue, 1) if not message.message or message.message == "" then if Heimdall_Data.config.messenger.debug then - print(string.format("[%s] Skipping empty message", ModuleName)) + shared.dumpTable(message, string.format("[%s] Skipping empty message", ModuleName)) end return end if not message.channel or message.channel == "" then if Heimdall_Data.config.messenger.debug then - print(string.format("[%s] Skipping message with no channel", ModuleName)) + shared.dumpTable(message, string.format("[%s] Skipping message with no channel", ModuleName)) end return end if not message.data or message.data == "" then if Heimdall_Data.config.messenger.debug then - print(string.format("[%s] Skipping message with no data", ModuleName)) + shared.dumpTable(message, string.format("[%s] Skipping message with no data", ModuleName)) end return end if Heimdall_Data.config.messenger.debug then - print( - string.format( - "[%s] Sending message: '%s' to %s:%s", - ModuleName, - message.message, - message.channel, - message.data - ) - ) + shared.dumpTable(message, string.format("[%s] Sending message:", ModuleName)) end if string.len(message.message) > 255 then - print(string.format("[%s] Message too long!!!!: %s", ModuleName, message.message)) + shared.dumpTable( + message, + string.format("[%s] Message too long!!!!: %s", ModuleName, message.message) + ) return end SendChatMessage(message.message, message.channel, nil, message.data) end local function Tick() if Heimdall_Data.config.messenger.debug then - print(string.format("[%s] Tick - Queue size: %d", ModuleName, #shared.messenger.queue)) + print(string.format("[%s] Tick - Queue size: %d", ModuleName, #shared.messenger.queue:get())) end DoMessage() shared.messenger.ticker = C_Timer.NewTimer(Heimdall_Data.config.messenger.interval, Tick, 1)