From d620f577c11583231212554dc70b5e99af214518 Mon Sep 17 00:00:00 2001 From: PhatPhuckDave Date: Wed, 15 Jan 2025 11:30:26 +0100 Subject: [PATCH] Implement note delete Weird start, I know --- Modules/Noter.lua | 81 +++++++++++++++++++++++++++++++++++------------ 1 file changed, 61 insertions(+), 20 deletions(-) diff --git a/Modules/Noter.lua b/Modules/Noter.lua index 2ecbecc..d7e39d1 100644 --- a/Modules/Noter.lua +++ b/Modules/Noter.lua @@ -48,8 +48,8 @@ function shared.Noter.Init() -- Saying "note " will list last N notes -- Saying "note i" will list the i-th note -- Saying "note i..j" will list notes from i to j - -- Saying "note delete i" will delete the i-th note - -- Saying "note delete i..j" will delete notes from i to j + -- Saying "note delete i" will delete the i-th note + -- Saying "note delete i..j" will delete notes from i to j local noterChannelFrame = CreateFrame("Frame") noterChannelFrame:RegisterEvent("CHAT_MSG_CHANNEL") noterChannelFrame:SetScript("OnEvent", function(self, event, msg, sender, ...) @@ -81,28 +81,69 @@ function shared.Noter.Init() shared.dumpTable(Heimdall_Data.config.noter) end - for _, command in ipairs(commands) do - local enabled = Heimdall_Data.config.noter.commands[command.keywordRe] == true or false + if not msg or msg == "" then if Heimdall_Data.config.noter.debug then - print(string.format("[%s] Command match: %s = %s", ModuleName, command.keywordRe, tostring(enabled))) + print(string.format("[%s] Empty message, ignoring", ModuleName)) end - if enabled and - (not command.commanderOnly - or (command.commanderOnly - and sender == Heimdall_Data.config.noter.commander)) then - if msg:match(command.keywordRe) then - local messages = command.callback({ strsplit(",", msg) }) + return + end + + local args = { strsplit(" ", msg) } + if Heimdall_Data.config.noter.debug then + print(string.format("[%s] Arguments received: %s", ModuleName, table.concat(args, ", "))) + shared.dumpTable(args) + end + local command = args[1] + if command == "note" then + local name = strtrim(string.lower(args[2])) + if Heimdall_Data.config.noter.debug then + print(string.format("[%s] Note command received for: %s", ModuleName, name)) + end + local note = strtrim(args[3]) + if note == "delete" then + if Heimdall_Data.config.noter.debug then + print(string.format("[%s] Delete note command received for: %s", ModuleName, name)) + end + local range = args[4] + if range then if Heimdall_Data.config.noter.debug then - print(string.format("[%s] Messages to send: %s", ModuleName, strjoin(", ", unpack(messages)))) + print(string.format("[%s] Range received for delete note: %s", ModuleName, range)) end - for _, message in ipairs(messages) do - ---@type Message - local msg = { - channel = "CHANNEL", - data = channelname, - message = message - } - table.insert(shared.messenger.queue, msg) + local indices = shared.Split(range, "..") + if Heimdall_Data.config.noter.debug then + print(string.format("[%s] Indices for range deletion: %s", ModuleName, + table.concat(indices, ", "))) + shared.dumpTable(indices) + end + local start = tonumber(indices[1]) + local finish = tonumber(indices[2]) + + if not start then + if Heimdall_Data.config.noter.debug then + print(string.format("[%s] Invalid start range for delete note: %s", ModuleName, + tostring(start))) + end + return + end + + if not finish then finish = start end + if Heimdall_Data.config.noter.debug then + print(string.format("[%s] Deleting note range %s to %s for: %s", ModuleName, start, finish, name)) + end + + for i = start, finish do + if not Heimdall_Data.config.notes[name] then Heimdall_Data.config.notes[name] = {} end + if not Heimdall_Data.config.notes[name][i] then + if Heimdall_Data.config.noter.debug then + print(string.format("[%s] Note at index %s does not exist", ModuleName, i)) + end + else + if Heimdall_Data.config.noter.debug then + print(string.format("[%s] Deleting note %s at index %s", ModuleName, name, i)) + shared.dumpTable(Heimdall_Data.config.notes[name][i]) + end + Heimdall_Data.config.notes[name][i] = nil + end end end end