-- "каждый день в 9:00 делай briefing" / "каждое утро в 8 напоминай зарядку" local phrase = (jarvis.context.phrase or ""):lower() local body = jarvis.text.strip_trigger(phrase, { "каждое утро в", "каждый день в", "ежедневно в", "по утрам в", "every day at", "daily at", "щодня о", "кожен день о", }) body = body:gsub("^[%s,:%.]+", ""):gsub("%s+$", "") -- Parse "HH:MM " or "HH " local h, m, rest = body:match("^(%d%d?)%s*[:%-]%s*(%d%d?)%s*(.*)$") if not h then h, rest = body:match("^(%d%d?)%s*(.*)$") m = "00" end if not h then jarvis.speak("Не понял время.") jarvis.audio.play_error() return { chain = false } end local hn = tonumber(h) local mn = tonumber(m) or 0 if hn < 0 or hn > 23 or mn < 0 or mn > 59 then jarvis.speak("Время вне диапазона.") jarvis.audio.play_error() return { chain = false } end local schedule = string.format("daily %02d:%02d", hn, mn) local text_body = (rest or ""):gsub("^напоминай%s+", "") :gsub("^напомни%s+", "") :gsub("^делай%s+", "") :gsub("^[%s,:%.]+", "") :gsub("%s+$", "") if text_body == "" then text_body = "Доброе утро." end local ok, err = pcall(function() jarvis.scheduler.add({ name = "Daily", 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(string.format("Каждый день в %02d:%02d.", hn, mn)) jarvis.audio.play_ok() return { chain = false }