WoW:USERAPI RunSlashCmd

Revision as of 23:22, 27 June 2010 by WoWWiki>WoWWiki-Shefki (Apparently the frame does need to be named.)

Thanks to cladhaire and Josh_Borke for all the effort in coming up with this code that allows you to pass a /command to wow from a lua script. The following code is cladhaire's final product

local _G = _G
local function RunSlashCmd(cmd)
  local slash, rest = cmd:match("^(%S+)%s*(.-)$")
  for name in pairs(SlashCmdList) do
     local i = 1
     local slashCmd
     repeat
        slashCmd = _G["SLASH_"..name..i]
        
        if slashCmd == slash then
           -- Call the handler
           SlashCmdList[name](rest)
           return true
        end
        i = i + 1
     until not slashCmd
  end
end 

Usage

RunSlashCmd("/help")
RunSlashCmd("/addon do this")

Try

local t={}; t.GetText = function(self) return self.text end; local function RunSlash(slash) t.text = slash; ChatEdit_ParseText(t) end

Alternative

Another method to accomplish the same effect is to insert the command into an editbox and send the command. Note that it's usually better to do this with your own EditBox to avoid taint or conflicts with user input into the default editbox.

-- Create our editbox (may not need a name, untested)
local editbox = CreateFrame("EditBox", "myEditBox", UIParent, "ChatFrameEditBoxTemplate")

editbox:SetText("/command here") 
ChatEdit_SendText(editbox)

However as of 3.3.5 you must set the chatFrame variable on your editbox before the OnLoad function runs. So if you want to use the above code you need to create the frame in XML or create a template and then use that template to create the frame.

<EditBox name="MyAddOnEditBoxTemplate" inherits="ChatFrameEditBoxTemplate" virtual="true">
  <Scripts>
    <OnLoad>
       self.chatFrame = self:GetParent();
       ChatEdit_OnLoad(self);
    </OnLoad>
  </Scripts>
</EditBox>

And then use:

-- Create our editbox
local editbox = CreateFrame("EditBox", "MyAddOnEditBox", UIParent, "MyAddOnEditBoxTemplate")

editbox:SetText("/command here") 
ChatEdit_SendText(editbox)