56 lines
1.5 KiB
Lua
56 lines
1.5 KiB
Lua
|
|
local phrase = (jarvis.context.phrase or ""):lower()
|
|||
|
|
local body = jarvis.text.strip_trigger(phrase, {
|
|||
|
|
"запомни обо мне что",
|
|||
|
|
"запомни обо мне",
|
|||
|
|
"запомни что",
|
|||
|
|
"помни что",
|
|||
|
|
"запомни это",
|
|||
|
|
"запомни про меня",
|
|||
|
|
"запомни",
|
|||
|
|
"remember that",
|
|||
|
|
"remember about me",
|
|||
|
|
"memorize",
|
|||
|
|
"запам'ятай що",
|
|||
|
|
"запам'ятай про мене",
|
|||
|
|
})
|
|||
|
|
|
|||
|
|
body = body:gsub("^[%s,:%.]+", ""):gsub("%s+$", "")
|
|||
|
|
|
|||
|
|
if body == "" then
|
|||
|
|
jarvis.speak("Что именно запомнить?")
|
|||
|
|
jarvis.audio.play_error()
|
|||
|
|
return { chain = false }
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
-- Heuristic: derive a key. Look for "что X = Y" / "что у меня X" / etc.
|
|||
|
|
-- For now: first 3-5 meaningful words become the key.
|
|||
|
|
local key = body
|
|||
|
|
local _, after_eq = body:find("=", 1, true)
|
|||
|
|
if after_eq then
|
|||
|
|
key = body:sub(1, after_eq - 1):gsub("%s+$", "")
|
|||
|
|
body = body:sub(after_eq + 1):gsub("^%s+", "")
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
-- truncate key to first 6 words
|
|||
|
|
local words = {}
|
|||
|
|
for w in key:gmatch("%S+") do
|
|||
|
|
table.insert(words, w)
|
|||
|
|
if #words >= 6 then break end
|
|||
|
|
end
|
|||
|
|
key = table.concat(words, " ")
|
|||
|
|
|
|||
|
|
local ok, err = pcall(function()
|
|||
|
|
jarvis.memory.remember(key, body)
|
|||
|
|
end)
|
|||
|
|
|
|||
|
|
if not ok then
|
|||
|
|
jarvis.log("warn", "memory.remember failed: " .. tostring(err))
|
|||
|
|
jarvis.speak("Не удалось запомнить.")
|
|||
|
|
jarvis.audio.play_error()
|
|||
|
|
return { chain = false }
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
jarvis.speak("Запомнил.")
|
|||
|
|
jarvis.audio.play_ok()
|
|||
|
|
return { chain = false }
|