add quoted arguments
This commit is contained in:
parent
ea4b8679c9
commit
e8a1270932
1 changed files with 33 additions and 2 deletions
35
core.lua
35
core.lua
|
@ -35,9 +35,40 @@ local function receiveUpdate(self, update)
|
||||||
if (msg.chat.type == 'group' or msg.chat.type == 'supergroup')
|
if (msg.chat.type == 'group' or msg.chat.type == 'supergroup')
|
||||||
and not to then return end
|
and not to then return end
|
||||||
|
|
||||||
local args = {}
|
-- remove needn't text
|
||||||
msg.text = msg.text:sub(#cmd + #(to or '') + 3)
|
msg.text = msg.text:sub(#cmd + #(to or '') + 3)
|
||||||
for s in msg.text:gmatch '%S+' do table.insert(args, s) end
|
|
||||||
|
-- "quoted" and not quoted args support
|
||||||
|
-- inside quotes, buffer and final args
|
||||||
|
local iq, buf, args = false, '', {}
|
||||||
|
local qt, esc = nil, false -- quote type and escape, addition
|
||||||
|
|
||||||
|
-- helper function, add args and clean buffer
|
||||||
|
local function psh()
|
||||||
|
if #buf > 0 then table.insert(args, buf) end
|
||||||
|
buf = ''
|
||||||
|
qt = nil
|
||||||
|
end
|
||||||
|
|
||||||
|
for i = 1, #msg.text do
|
||||||
|
local v = msg.text:sub(i, i)
|
||||||
|
print(v, buf, iq)
|
||||||
|
-- if space and not inside quotes
|
||||||
|
if (v == ' ' or v == '\n' or v == '\t')
|
||||||
|
and not iq then psh()
|
||||||
|
|
||||||
|
elseif esc then esc, buf = false, buf.. v
|
||||||
|
elseif v == '\\' then esc = true
|
||||||
|
|
||||||
|
elseif (not qt or qt == v)
|
||||||
|
and (v == '"' or v == "'") then
|
||||||
|
psh()
|
||||||
|
qt, iq = v, not iq -- quote type, inside quote
|
||||||
|
|
||||||
|
else buf = buf.. v -- append buffer
|
||||||
|
end
|
||||||
|
end
|
||||||
|
psh() -- if has something
|
||||||
|
|
||||||
msg.cmd = cmd
|
msg.cmd = cmd
|
||||||
msg.args = args
|
msg.args = args
|
||||||
|
|
Loading…
Reference in a new issue