diff --git a/Heimdall.lua b/Heimdall.lua index caab483..60ac6b1 100644 --- a/Heimdall.lua +++ b/Heimdall.lua @@ -8,7 +8,10 @@ if not Heimdall_Data then Heimdall_Data = {} end ---@field raceMap table ---@field stinkies table ---@field messenger HeimdallMessengerData +---@field who HeimdallWhoData ---@field dumpTable fun(table: any, depth?: number): nil +---@field utf8len fun(input: string): number +---@field padString fun(input: string, targetLength: number, left?: boolean): string --- Config --- ---@class HeimdallConfig @@ -37,6 +40,9 @@ if not Heimdall_Data then Heimdall_Data = {} end ---@field queue table ---@field ticker number? +---@class HeimdallWhoData +---@field ticker number? + data.messenger = { queue = {} } @@ -85,3 +91,46 @@ data.raceMap = { } data.stinkies = {} + +---@param input string +---@return number +data.utf8len = function(input) + if not input then + return 0 + end + local len = 0 + local i = 1 + local n = #input + while i <= n do + local c = input:byte(i) + if c >= 0 and c <= 127 then + i = i + 1 + elseif c >= 194 and c <= 223 then + i = i + 2 + elseif c >= 224 and c <= 239 then + i = i + 3 + elseif c >= 240 and c <= 244 then + i = i + 4 + else + i = i + 1 + end + len = len + 1 + end + return len +end +---@param input string +---@param targetLength number +---@param left boolean +---@return string +data.padString = function(input, targetLength, left) + left = left or false + local len = data.utf8len(input) + if len < targetLength then + if left then + input = input .. string.rep(" ", targetLength - len) + else + input = string.rep(" ", targetLength - len) .. input + end + end + return input +end \ No newline at end of file diff --git a/Messenger.lua b/Messenger.lua index 702a4fb..90c5803 100644 --- a/Messenger.lua +++ b/Messenger.lua @@ -1,6 +1,8 @@ local _, data = ... ---@cast data HeimdallData +if not data.config.messenger.enabled then return end + ---@class Message ---@field message string ---@field channel string