Implement basic structure for noter
This commit is contained in:
113
Modules/Noter.lua
Normal file
113
Modules/Noter.lua
Normal file
@@ -0,0 +1,113 @@
|
||||
local addonname, shared = ...
|
||||
---@cast shared HeimdallShared
|
||||
---@cast addonname string
|
||||
local ModuleName = "Noter"
|
||||
|
||||
---@class Note
|
||||
---@field source string
|
||||
---@field for string
|
||||
---@field date string
|
||||
---@field note string
|
||||
|
||||
---@diagnostic disable-next-line: missing-fields
|
||||
shared.Noter = {}
|
||||
function shared.Noter.Init()
|
||||
---@param text string
|
||||
---@param size number
|
||||
---@return string[]
|
||||
local function Partition(text, size)
|
||||
local words = {}
|
||||
for word in text:gmatch("[^,]+") do
|
||||
words[#words + 1] = word
|
||||
end
|
||||
|
||||
local ret = {}
|
||||
local currentChunk = ""
|
||||
|
||||
for _, word in ipairs(words) do
|
||||
if #currentChunk + #word + 1 <= size then
|
||||
currentChunk = currentChunk .. (currentChunk == "" and word or " " .. word)
|
||||
else
|
||||
if #currentChunk > 0 then
|
||||
ret[#ret + 1] = currentChunk
|
||||
end
|
||||
currentChunk = word
|
||||
end
|
||||
end
|
||||
|
||||
if #currentChunk > 0 then
|
||||
ret[#ret + 1] = currentChunk
|
||||
end
|
||||
|
||||
return ret
|
||||
end
|
||||
|
||||
-- Here's the plan:
|
||||
-- Implement a "note" command, that will do everything
|
||||
-- Saying "note <name> <note>" will add a note to the list for the character
|
||||
-- Saying "note <name>" will list last N notes
|
||||
-- Saying "note <name> i" will list the i-th note
|
||||
-- Saying "note <name> i..j" will list notes from i to j
|
||||
-- Saying "note delete <name> i" will delete the i-th note
|
||||
-- Saying "note delete <name> 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, ...)
|
||||
--if Heimdall_Data.config.noter.debug then
|
||||
-- print(string.format("[%s] Event received", ModuleName))
|
||||
-- shared.dumpTable(Heimdall_Data.config.noter)
|
||||
--end
|
||||
if not Heimdall_Data.config.noter.enabled then
|
||||
--if Heimdall_Data.config.noter.debug then
|
||||
-- print(string.format("[%s] Module disabled, ignoring event", ModuleName))
|
||||
--end
|
||||
return
|
||||
end
|
||||
local channelId = select(6, ...)
|
||||
local _, channelname = GetChannelName(channelId)
|
||||
--if Heimdall_Data.config.noter.debug then
|
||||
-- print(string.format("[%s] Channel received: %s", ModuleName, channelname))
|
||||
--end
|
||||
if channelname ~= Heimdall_Data.config.noter.masterChannel then
|
||||
--if Heimdall_Data.config.noter.debug then
|
||||
-- print(string.format("[%s] Channel %s does not match master channel %s", ModuleName, channelname, Heimdall_Data.config.noter.masterChannel))
|
||||
--end
|
||||
return
|
||||
end
|
||||
|
||||
sender = string.match(sender, "^[^-]+")
|
||||
if Heimdall_Data.config.noter.debug then
|
||||
print(string.format("[%s] Message from: %s", ModuleName, sender))
|
||||
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 Heimdall_Data.config.noter.debug then
|
||||
print(string.format("[%s] Command match: %s = %s", ModuleName, command.keywordRe, tostring(enabled)))
|
||||
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) })
|
||||
if Heimdall_Data.config.noter.debug then
|
||||
print(string.format("[%s] Messages to send: %s", ModuleName, strjoin(", ", unpack(messages))))
|
||||
end
|
||||
for _, message in ipairs(messages) do
|
||||
---@type Message
|
||||
local msg = {
|
||||
channel = "CHANNEL",
|
||||
data = channelname,
|
||||
message = message
|
||||
}
|
||||
table.insert(shared.messenger.queue, msg)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
print("[Heimdall] Commander module loaded")
|
||||
end
|
||||
Reference in New Issue
Block a user