-- "напомни мне через 5 минут выключить кофеварку" local phrase = (jarvis.context.phrase or ""):lower() -- Strip the trigger local body = jarvis.text.strip_trigger(phrase, { "напомни мне через", "напомни через", "поставь напоминалку через", "поставь напоминание через", "разбуди через", "remind me in", "set a reminder in", "нагадай через", "постав нагадування через", }) body = body:gsub("^[%s,:%.]+", ""):gsub("%s+$", "") if body == "" then jarvis.speak("Через сколько и про что напомнить?") jarvis.audio.play_error() return { chain = false } end -- Parse " " -- N can be digit or word (один, два, ...) — for v1 only digits local n_str, unit, rest = body:match("^(%d+)%s+(%S+)%s*(.*)$") if not n_str then -- maybe "час" / "минуту" (singular) local single_unit, rest2 = body:match("^([%a]+)%s*(.*)$") if single_unit then local map = { ["час"] = "1 hours", ["минуту"] = "1 minutes", ["секунду"] = "1 seconds", } if map[single_unit] then local schedule = "in " .. map[single_unit] local text_body = rest2:gsub("^[%s,:%.]+", ""):gsub("%s+$", "") if text_body == "" then text_body = "Напоминание." end local ok, err = pcall(function() jarvis.scheduler.add({ name = "Reminder", schedule = schedule, action = { type = "speak", text = text_body } }) end) if not ok then jarvis.log("warn", "scheduler.add: " .. tostring(err)) jarvis.speak("Не получилось.") jarvis.audio.play_error() return { chain = false } end jarvis.speak("Напомню через " .. single_unit .. ".") jarvis.audio.play_ok() return { chain = false } end end jarvis.speak("Не понял через сколько. Скажите например: через 5 минут.") jarvis.audio.play_error() return { chain = false } end local n = tonumber(n_str) local unit_norm local sample if unit:match("^минут") or unit == "минуты" or unit == "минуту" or unit:match("^minute") then unit_norm = "minutes" sample = n .. " минут" elseif unit:match("^час") or unit:match("^hour") then unit_norm = "hours" sample = n .. " час" .. (n == 1 and "" or (n < 5 and "а" or "ов")) elseif unit:match("^секунд") or unit:match("^second") then unit_norm = "seconds" sample = n .. " секунд" else jarvis.speak("Не понял единицу. Минуты или часы.") jarvis.audio.play_error() return { chain = false } end local schedule = string.format("in %d %s", n, unit_norm) local text_body = rest:gsub("^[%s,:%.]+", ""):gsub("%s+$", "") if text_body == "" then text_body = "Напоминание." end local ok, err = pcall(function() jarvis.scheduler.add({ name = "Reminder", schedule = schedule, action = { type = "speak", text = text_body } }) end) if not ok then jarvis.log("warn", "scheduler.add: " .. tostring(err)) jarvis.speak("Не получилось добавить напоминание.") jarvis.audio.play_error() return { chain = false } end jarvis.speak("Напомню через " .. sample .. ".") jarvis.audio.play_ok() return { chain = false }