46 lines
1.6 KiB
Lua
46 lines
1.6 KiB
Lua
|
|
local lang = jarvis.context.language
|
||
|
|
local phrase = (jarvis.context.phrase or ""):lower()
|
||
|
|
|
||
|
|
local triggers = { "выбери из", "выбери", "решай за меня", "выбрать",
|
||
|
|
"pick from", "choose from", "decide between",
|
||
|
|
"обери з", "вибери" }
|
||
|
|
local rest = phrase
|
||
|
|
for _, t in ipairs(triggers) do
|
||
|
|
local s, e = string.find(rest, t, 1, true)
|
||
|
|
if s == 1 then
|
||
|
|
rest = rest:sub(e + 1)
|
||
|
|
break
|
||
|
|
end
|
||
|
|
end
|
||
|
|
rest = rest:gsub("^%s+", ""):gsub("%s+$", "")
|
||
|
|
|
||
|
|
local separators = { " или ", " or ", ", ", " либо ", " чи " }
|
||
|
|
local options = nil
|
||
|
|
for _, sep in ipairs(separators) do
|
||
|
|
local pattern = sep:gsub("([%-%.%+%[%]%(%)%$%^%%%?%*])", "%%%1")
|
||
|
|
if rest:find(pattern) then
|
||
|
|
options = {}
|
||
|
|
for token in (rest .. sep):gmatch("(.-)" .. pattern) do
|
||
|
|
token = token:gsub("^%s+", ""):gsub("%s+$", "")
|
||
|
|
if token ~= "" then table.insert(options, token) end
|
||
|
|
end
|
||
|
|
break
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
if not options or #options < 2 then
|
||
|
|
jarvis.system.notify("Choice", lang == "ru"
|
||
|
|
and "Скажи: выбери из X или Y или Z"
|
||
|
|
or "Say: pick from X or Y or Z")
|
||
|
|
jarvis.audio.play_error()
|
||
|
|
return { chain = false }
|
||
|
|
end
|
||
|
|
|
||
|
|
math.randomseed(os.time() + math.floor(jarvis.context.time.second * 7919))
|
||
|
|
local pick = options[math.random(1, #options)]
|
||
|
|
|
||
|
|
jarvis.system.notify(lang == "ru" and "Выбираю" or "Choice", pick)
|
||
|
|
jarvis.speak((lang == "ru" and "Я выбираю " or "I pick ") .. pick, { lang = lang })
|
||
|
|
jarvis.audio.play_ok()
|
||
|
|
return { chain = false }
|