This page documents a user-defined function that you can copy and paste into your addon. Replace PREFIX with your addon or lib prefix to avoid conflicts between different versions of these functions.

User defined functions

Returns the function called when using /cmd.

slashFunction = USERAPI GetSlashFunc(cmd)

Function Parameters[edit | edit source]

Arguments[edit | edit source]

(cmd)
cmd 
the slash command to search for

Returns[edit | edit source]

the actual function called when executing the cmd.

Example[edit | edit source]

local func = GetSlashFunc("/quit")
SLASH_MYQUIT1 = "/quit"
SLASH_MYQUIT2 = "/exit"
SlashCmdList["MYQUIT"] = function(msg)
    if msg == "now" then
        ForceQuit()
    elseif func then
        func()
    end
end

Result[edit | edit source]

Quit now instead of in 30 seconds when /quit now is used.

Code[edit | edit source]

-- returns a slash command function on success or an informative error function on failure.
local function GetSlashFunc(cmd)
    if not cmd then
        return function(cmd) print("You must supply a command.") end
    end
    if cmd:sub(1, 1) ~= "/" then
        cmd = "/" .. cmd
    end
    for id, val in pairs(_G) do
        if id:sub(1, 5) == "SLASH" and val == cmd then
            local slashID = id:match("SLASH_(%a*)%d*")
            return SlashCmdList[slashID]
        end
    end
    -- Didn't find one?
    return function(cmd) print(cmd, "doesn't exist.") end
end

Notes[edit | edit source]

  • This will not work to hook secure commands such as /target, /cast, /focus, etc. The functions that are called with those commands are not globally accessible to addon scripts and, if they were, you would just end up breaking stuff.
  • If an addon creates its slash command after yours, yours will no longer work (as per usual).


Community content is available under CC-BY-SA unless otherwise noted.