Implement message command in messenger

This commit is contained in:
2025-01-15 13:48:56 +01:00
parent 799d3e1ddd
commit d4b0dee037

View File

@@ -6,61 +6,59 @@ local ModuleName = "NetworkMessenger"
---@diagnostic disable-next-line: missing-fields ---@diagnostic disable-next-line: missing-fields
shared.NetworkMessenger = {} shared.NetworkMessenger = {}
function shared.NetworkMessenger.Init() function shared.NetworkMessenger.Init()
local updateTime = 0 RegisterAddonMessagePrefix(Heimdall_Data.config.addonPrefix)
local friendsFrame = CreateFrame("Frame") local addonMsgFrame = CreateFrame("Frame")
friendsFrame:RegisterEvent("FRIENDLIST_UPDATE") addonMsgFrame:RegisterEvent("CHAT_MSG_ADDON")
friendsFrame:SetScript("OnEvent", function(self, event, ...) addonMsgFrame:SetScript("OnEvent", function(self, event, prefix, message, channel, source)
---@type table<string, boolean> if not Heimdall_Data.config.networkMessenger.enabled then return end
local friends = {} if prefix ~= Heimdall_Data.config.addonPrefix then return end
for i = 1, GetNumFriends() do source = string.match(source, "[^%-]+")
local name, level, class, area, connected, status, note, RAF = GetFriendInfo(i)
friends[name] = connected if Heimdall_Data.config.networkMessenger.debug then
if Heimdall_Data.config.network.debug then print(string.format("[%s] Received message from %s: %s", ModuleName, source, message))
print(string.format("[%s] Friend %s is %s", ModuleName, name, connected and "online" or "offline"))
end end
if #shared.networkNodes == 0 then
if Heimdall_Data.config.networkMessenger.debug then
print(string.format("[%s] No network nodes found, wtf????", ModuleName))
end
return
end end
for _, member in ipairs(Heimdall_Data.config.network.members) do -- There should always be at least one network node ergo should always exist a leader
if friends[member] == nil then -- Because the us, the player, is also a node
if Heimdall_Data.config.network.debug then local networkLeader = shared.networkNodes[1]
print(string.format("[%s] Adding friend %s", ModuleName, member)) if source ~= networkLeader then
end if Heimdall_Data.config.networkMessenger.debug then
AddFriend(member) print(string.format("[%s] Message from %s is not from the network leader (%s)", ModuleName, source,
networkLeader))
end end
return
end end
--/run SendAddonMessage("HEIMDALL", "message|hello|WHISPER|Prímus", "WHISPER", UnitName("player"))
shared.networkNodes = {} local parts = shared.Split(message, "|")
for _, player in ipairs(Heimdall_Data.config.network.members) do if Heimdall_Data.config.networkMessenger.debug then
if friends[player] then print(string.format("[%s] Received message parts:", ModuleName))
shared.networkNodes[player] = true shared.dumpTable(parts)
if Heimdall_Data.config.network.debug then
print(string.format("[%s] Adding network node %s", ModuleName, player))
end end
local command = strtrim(parts[1])
if command == "message" then
local message = strtrim(parts[2])
local channel = strtrim(parts[3])
local target = strtrim(parts[4])
if Heimdall_Data.config.networkMessenger.debug then
print(string.format("[%s] Received message command: %s %s %s", ModuleName, message, channel, target))
end end
end ---@type Message
if Heimdall_Data.config.network.debug then local msg = {
print(string.format("[%s] Network nodes:", ModuleName)) channel = channel,
shared.dumpTable(shared.networkNodes) message = message,
data = target
}
table.insert(shared.messenger.queue, msg)
end end
end) end)
local function Update()
if not Heimdall_Data.config.network.enabled then return end
if Heimdall_Data.config.network.debug then
print("Network module is updating.")
end
ShowFriends()
end
local networkFrame = CreateFrame("Frame")
networkFrame:SetScript("OnUpdate", function(self, elapsed)
if not Heimdall_Data.config.network.enabled then return end
updateTime = updateTime + elapsed
if updateTime >= Heimdall_Data.config.network.updateInterval then
Update()
updateTime = 0
end
end)
print("[Heimdall] NetworkMessenger module loaded") print("[Heimdall] NetworkMessenger module loaded")
end end