Напоминания устанавливаются фразами, начинающимися со слова "Напомни", а далее указывается время в которое, или через сколько, система должна сработать.
Примеры:
- Напомни через 15 минут выключить суп.
- Напомни через 4 часа сходить в магазин
- Напомни через 251 секунду о пельменях
- Напомни в 15:00 позвонить другу
- Напомни сегодня в 20:15 выгулять собаку
- Напомни завтра в 11:59 посмотреть новости
- Напомни послезавтра в 12:30 заплатить за Интернет
Если команды давать голосом через мобильное приложение или расширение для Chrome, то еще удобней становится.
А дальше... Не пинайте меня, с системой Мажордомо начал разбираться совсем недавно, программную часть клепал на коленке для себя, натужно вспоминая синтаксис PHP.
Возможно, все можно было реализовать проще и красивее, но что получилось, то получилось и оно работает. Конструктивную критику готов принять.
Реализация:
В разделе "Панель управления/Шаблоны поведения" создаем шаблон "Напоминание" (можно дать и другое имя)
По надобности ставим галочки "не проверять другие шаблоны при совпадении" и "Не реагировать на системные сообщения"
У кого подключена морфология обязательно проверить, чтобы галочка "Use morphology" не стояла.
Задаем шаблон:
Код: Выделить всё
(Н|н)апомни ((через \d+ (часа|час|минут|минуту|минуты|секунд|секунды|секунду))|в \d+:\d+|(завтра|послезавтра|сегодня|на завтра|на послезавтра) в \d+:\d+) (.+)
Код: Выделить всё
$u=5;
$naptime = mb_strtolower($matches[2]);
$request = mb_strtolower($matches[6]);
if ($request!='') {
$su=0;
$naptime=str_replace(" на ", " ", $naptime);
if (stristr($naptime, "сегодня") != FALSE) {$naptime = str_replace("сегодня ", "", $naptime); $su=0;}
if (stristr($naptime, "послезавтра") != FALSE) {$naptime = str_replace("послезавтра ", "", $naptime); $su=2;}
if (stristr($naptime, "завтра") != FALSE) {$naptime = str_replace("завтра", "", $naptime); $su=1;}
$a=$su*86400+recognizeTime($naptime,$b);
if(time()<($a-60)){
$nday=date( "j" , $a);
$MonthNames=array("января", "февраля", "марта", "апреля", "мая", "июня", "июля", "августа", "сентября", "октября", "ноября", "декабря");
$nmes=date( "n" , $a)-1;
$nmonth=$MonthNames[$nmes];
$ntime=date( "H:i" , $a);
$chisl = array(1=> 'первое',2=> 'второе',3=> 'третье',4=> 'четвертое',5=> 'пятое',6=> 'шестое',7=> 'седьмое',8=> 'восьмое',9=> 'девятое',10=> 'десятое',11=> 'одиннадцатое',12=> 'двенадцатое',13=> 'тринадцатое',14=> 'четырнадцатое' ,15=> 'пятнадцатое',16=> 'шестнадцатое',17=> 'семнадцатое',18=> 'восемнадцатое',19=> 'девятнадцатое',20=> 'двадцатое',30=> 'тридцатое',21=> 'двадцать',31=> 'тридцать');
if ($nday<21||$nday==30) {$chtext=$chisl[$nday];} else {$chtext=$chisl[(int)($nday/10)*10+1].' '.$chisl[$nday % 10] ;}
AddScheduledJob($request,"playSound('opoveshenie.mp3'); say('Вы просили напомнить ".$request."',".$u.");",$a, 60);
say("Задание напомнить ".$request." установлено на ".$chtext." ".$nmonth." в ".$ntime,$u);}
else
{say("Назначить напоминание на заданное время невозможно!",$u);}}
else
{say("Непонятно, что напомнить?!",$u);}
Для выделения напоминаний добавил дополнительный звук командой playSound('opoveshenie.mp3');
Если вам звук не нужен удалите ее. В противном случае добавьте звук opoveshenie.mp3 в систему, через раздел "Панель управления/Настройки/Звуковые файлы" (мой вариант прикреплен к сообщению в архиве, перед добавлением в систему распаковать) Да, еще, напоминание на прошедшее время или на время ближе чем через 60 секунд не устанавливается.
Каждое напоминание срабатывает только один раз, сколько максимально одновременно возможно задать напоминаний не проверял, главное давать разное задание. При перезагрузке системы все "ненапомненные" задания сохраняются.
Отмена напоминаний
На фразу "Отмени напоминание..." система удаляет задание
Примеры фраз:
- Отмени напоминание выключить суп.
- Отмени напоминание выгулять собаку
- Отмени напоминание о пельменях
В разделе "Панель управления/Шаблоны поведения" создаем шаблон "Отмена напоминаний" (можно дать и другое имя)
По надобности ставим галочки "не проверять другие шаблоны при совпадении" и "Не реагировать на системные сообщения"
У кого подключена морфология обязательно проверить, чтобы галочка "Use morphology" не стояла.
Задаем шаблон:
Код: Выделить всё
(О|о)тмени напоминание (.+)
Код: Выделить всё
$u=5;
$naptime = mb_strtolower($matches[2]);
ClearScheduledJob($naptime);
say('Напоминание '.$naptime.' отменено!',$u);
В данном сообщении откорректированная версия, с исправлением недочетов.