no edit summary
(Apparently the frame does need to be named.) |
No edit summary |
||
| Line 1: | Line 1: | ||
The following snippet provides a global function RunSlashCmd that can be used to execute an arbitrary slash command (i.e. "/myaddon hi"). | |||
local _G = _G | local _G = _G | ||
function RunSlashCmd(cmd) | |||
local slash, rest = cmd:match("^(%S+)%s*(.-)$") | local slash, rest = cmd:match("^(%S+)%s*(.-)$") | ||
for name in pairs(SlashCmdList) do | for name, func in pairs(SlashCmdList) do | ||
local i = 1 | local i, slashCmd = 1 | ||
repeat | repeat | ||
slashCmd = _G["SLASH_"..name..i] | slashCmd, i = _G["SLASH_"..name..i], i + 1 | ||
if slashCmd == slash then | if slashCmd == slash then | ||
return true, func(rest) | |||
end | end | ||
until not slashCmd | until not slashCmd | ||
end | |||
-- Okay, so it's not a slash command. It may also be an emote. | |||
local i = 1 | |||
while _G["EMOTE" .. i .. "_TOKEN"] do | |||
local j, cn = 2, _G["EMOTE" .. i .. "_CMD1"] | |||
while cn do | |||
if cn == slash then | |||
return true, DoEmote(_G["EMOTE" .. i .. "_TOKEN"], rest); | |||
end | |||
j, cn = j+1, _G["EMOTE" .. i .. "_CMD" .. j] | |||
end | |||
i = i + 1 | |||
end | end | ||
end | end | ||
| Line 24: | Line 30: | ||
RunSlashCmd("/addon do this") | RunSlashCmd("/addon do this") | ||
== Alternative == | == Alternative == | ||