--imports local WIM = WIM; local _G = _G; local string = string; local type = type; local table = table; --set namespace. setfenv(1, WIM); local CommandList = {}; local CommandListDetails = {}; local CommandListRaw = {}; local function showCommands() local c = _G.DEFAULT_CHAT_FRAME; c:AddMessage("|cff69ccf0"..L["WIM (WoW Instant Messenger)"].."|r |cfff58cba"..WIM.version.."|r"); c:AddMessage("|cff69ccf0"..L["Usage"]..":|r ".."/wim {"..string.lower(table.concat(CommandListRaw, " | ")).."}"); for i=1, #CommandListRaw do local info = CommandListDetails[CommandListRaw[i]]; info = info and ":|r "..info or "|r" c:AddMessage(" - |cfff58cba"..string.lower(CommandListRaw[i])..info) end end local function processCommand(cmd) cmd = (cmd ~= "") and cmd or "options"; cmdList = cmdList or CommandList; local args; cmd, args = string.match(cmd, "([^%s]*)%s*(.*)"); cmd = string.upper(cmd); if(CommandList[cmd]) then CommandList[cmd](args); else if(cmd == "WHO") then WIM.WhoList(args); else showCommands(); end end if(cmd ~= "HELP") then -- DisplayTutorial(L["WIM Slash Commands"], L["To see a list of available WIM slash commands type:"].." |cff69ccf0/wim help|r"); end end -- Global function for Modules to add to WIM's slash commands. function RegisterSlashCommand(cmd, fun, info) if(type(cmd) == "string" and not CommandList[cmd] and type(fun) == "function") then CommandList[string.upper(cmd)] = fun; CommandListDetails[string.upper(cmd)] = info; table.insert(CommandListRaw, string.upper(cmd)); table.sort(CommandListRaw); end end -- from @TomCats to avoid tainting of slash command local lastMessage local function starts(String,Start) return string.sub(String,1,string.len(Start))==Start end _G.hooksecurefunc("ChatEdit_ParseText", function(editBox, send, parseIfNoSpaces) if (send == 0) then lastMessage = editBox:GetText() end end) _G.hooksecurefunc("ChatFrame_DisplayHelpTextSimple", function(frame) if (lastMessage and lastMessage ~= "") then local cmd = string.upper(lastMessage) if (starts(cmd, "/WIM")) then local count = 1 local numMessages = frame:GetNumMessages() local function predicateFunction(entry) if (count == numMessages) then if (string.match(entry, _G.HELP_TEXT_SIMPLE)) then return true end end count = count + 1 end frame:RemoveMessagesByPredicate(predicateFunction) processCommand(cmd:gsub("^/WIM%s*", "")) end end end) -- _G.SlashCmdList["WIM"] = processCommand; -- _G.SLASH_WIM1 = "/wim"; -- Register help menu RegisterSlashCommand("help", showCommands, L["Display available slash commands."]) -- register some tools for WIM; RegisterSlashCommand("rl", _G.ReloadUI, L["Reload User Interface."]); -- ReloadUI()