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