-- "каждые 2 часа напоминай попить воды" / "каждый час напоминай размяться" local phrase = (jarvis.context.phrase or ""):lower() local body = jarvis.text.strip_trigger(phrase, { "напоминай каждые", "напоминай каждый", "каждые", "каждый час", "remind me every", "every", "кожні", "нагадуй кожні", }) body = body:gsub("^[%s,:%.]+", ""):gsub("%s+$", "") -- Parse " " or "час " (implicit 1) local n_str, unit, rest = body:match("^(%d+)%s+(%S+)%s*(.*)$") local n, unit_norm, sample if n_str then n = tonumber(n_str) if unit:match("^минут") 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 "ов")) else jarvis.speak("Не понял единицу.") jarvis.audio.play_error() return { chain = false } end else -- "каждый час напоминай..." local single, rest2 = body:match("^(%a+)%s*(.*)$") if single and (single == "час" or single == "минуту" or single == "минута") then n = 1 unit_norm = (single == "час") and "hours" or "minutes" sample = (single == "час") and "час" or "минуту" rest = rest2 else jarvis.speak("Не понял через сколько повторять.") jarvis.audio.play_error() return { chain = false } end end -- Strip optional reminder verb local text_body = (rest or ""):gsub("^напоминай%s+", "") :gsub("^напомни%s+", "") :gsub("^remind me%s+", "") :gsub("^[%s,:%.]+", "") :gsub("%s+$", "") if text_body == "" then text_body = "Напоминание." end local schedule = string.format("every %d %s", n, unit_norm) local ok, err = pcall(function() jarvis.scheduler.add({ name = "Recurring", 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 }