Алиса
Шаблон: ((А|а)лиса|(А|а)лиска|(Э|э)лис|(А|а)лисочка)
Код
|
кто ты
Код
sayReply('Я являюсь программой управления этим домом. Всегда к ваши услугам.');
|
привет
Код
if(timeBetween("05:00", "11:00")){
sayReply("Доброе утро!",5);
}elseif(timeBetween("11:00", "17:00")){
sayReply("Добрый день!",5);
}elseif(timeBetween("17:00", "23:00")){
sayReply("Добрый вечер!",5);
}elseif(timeBetween("23:00", "05:00")){
sayReply("Доброй ночи!",5);
}else{ // Новое, неизвестное время суток.
sayReply('Привет!',1);
}
|
проверка связи
Код
sayReply("Да слышу я. Слышу...");
|
|
Включи или выключи
Шаблон: (^включи|^выключи)
Код
|
raspberry
Код
if (preg_match('/включи/uis',$original)) {
sayReply('Включаю Raspberry',1);
callMethod("Switch_Pi.turnOn");
} elseif (preg_match('/выключи/uis',$original)) {
sayReply('Выключаю Raspberry',1);
callMethod("Switch_Pi.turnOff");
} else {
sayReply('Непонятно что с Raspberry: '.$original,1);
}
|
бра
Код
if (preg_match('/включи/uis',$original)) {
sayReply('Включаю бра в гостинной',1);
callMethod("Switch7.turnOn");
} elseif (preg_match('/выключи/uis',$original)) {
sayReply('Выключаю бра в гостинной',1);
callMethod("Switch7.turnOff");
} else {
sayReply('Непонятно что с бра в гостинной: '.$original,1);
}
|
будильник
Код
if (preg_match('/включи/uis',$original)) {
sayReply("Включаю будильник на установленное время ".gg('AlarmOne.AlarmTime'),1);
setGlobal('AlarmOne.AlarmOn',1);
} elseif (preg_match('/выключи/uis',$original)) {
sayReply('Хорошо. Выключаю будильник',1);
setGlobal('AlarmOne.AlarmOn',0);
} else {
sayReply('Непонятно что с будильником: '.$original,1);
}
context_clear();
clearTimeOut('user_'.context_getuser().'_contexttimeout');
|
будильник (включить на XX часов YY минут)
Шаблон: будильник на (.*) (часа|часов|час)(\s+)(.*)((\s+(.+)\s*(.*))|(ровно))
Код
if (preg_match('/включи/uis',$original)) {
$h=$matches[1];
if (!check_for_number($h)) {
$ddd = explode(" ", $h);
$len=count($ddd);
$h=0;
for($j=0;$j<$len;$j++) {
$n=text_to_number($ddd[$j]);
//if (!$n) {$n="0";}
if (check_for_number($n)) {$h=$h+$n;}
else {$h=$matches[1];}
}
$h=(string)$h;
}
if (strlen($h)<2) {$h="0".$h;}
$m=$matches[4];
if (!check_for_number($m)) {
$ddd = explode(" ", $m);
$len=count($ddd);
$m=0;
for($j=0;$j<$len;$j++) {
$n=text_to_number($ddd[$j]);
//if (!$n) {$n="0";}
if (check_for_number($n)) {$m=$m+$n;}
else {$m=$matches[4];}
}
$m=(string)$m;
}
if (($h>24)|(!check_for_number($h))) {
say("Что это ".$h." ".$matches[2].".? И который это час по вашему.? Определитесь и сообщите снова.",1);
context_clear();
clearTimeOut('user_'.context_getuser().'_contexttimeout');
return;
}
if (($m>59)|(!check_for_number($m))) {
sayReply("Мне не понятно на сколько, в минутах, завести будильник, поэтому пусть будет ровно 00.",1);
$m="00";
}
if (!$m) {$m="00";}
if (($m<10)&($m!="00")) {$m="0".$m;}
sayReply(getRandomLine('ok')."Ставлю будильник на время ".$h." ".$matches[2]." ".$m." ".$matches[7].$matches[9],1);
setGlobal('AlarmOne.AlarmOn',1);
setGlobal('AlarmOne.AlarmTime',$h.':'.$m);
}
elseif (preg_match('/выключи/uis',$original)) {
sayReply(getRandomLine('ok').' Выключаю будильник полностью ',1);
setGlobal('AlarmOne.AlarmOn',0);
} else {
sayReply('Непонятно что с будильником: '.$original,1);
}
context_clear();
clearTimeOut('user_'.context_getuser().'_contexttimeout');
|
музыку или радио или песню
Шаблон: (музы(.*)|радио|песн(.*))
Код
if (preg_match('/включи/uis',$original)) {
runScript('playRadiola');
sayReply(LANG_DONE,1);
} elseif (preg_match('/выключи/uis',$original)) {
runScript('RadioStop');
sayReply(LANG_DONE,1);
} else {
sayReply('Непонятно что делать: '.$original,1);
}
|
подсветку
Код
sayReply("Где именно?",1);
|
зал
Код
if (preg_match('/включи/uis',$original)) {
sayReply('Включаю подсветку в гостиной',1);
callMethod("LedStrip1.turnOn");
} elseif (preg_match('/выключи/uis',$original)) {
sayReply('Выключаю подсветку в гостиной',1);
callMethod("LedStrip1.turnOff");
} else {
sayReply('Непонятно что с подсветкой в гостиной: '.$original,1);
}
|
кухня
Код
if (preg_match('/включи/uis',$original)) {
sayReply('Включаю подсветку на кухне',1);
callMethod("LedStrip2.turnOn");
} elseif (preg_match('/выключи/uis',$original)) {
sayReply('Выключаю подсветку на кухне',1);
callMethod("LedStrip2.turnOff");
} else {
sayReply('Непонятно что с подсветкой на кухне: '.$original,1);
}
|
спальня
Код
if (preg_match('/включи/uis',$original)) {
sayReply('Включаю подсветку в спальне',1);
callMethod("Switch8.turnOn");
} elseif (preg_match('/выключи/uis',$original)) {
sayReply('Выключаю подсветку в спальне',1);
callMethod("Switch8.turnOff");
} else {
sayReply('Непонятно что с подсветкой в спальне: '.$original,1);
}
|
|
романтическую обстановку
Шаблон: (романтику|интим|романтическую обстановку)
Код
if (preg_match('/включи/uis',$original)) {
runScript('scenario_romantic');
sayReply(LANG_DONE,1);
} elseif (preg_match('/выключи/uis',$original)) {
runScript('RadioStop');
callMethod("LedStrip1.turnOff");
sayReply(LANG_DONE,1);
} else {
sayReply('Непонятно что делать: '.$original,1);
}
|
свет
Код
sayReply("Где именно?",1);
|
ванна
Код
if (preg_match('/включи/uis',$original)) {
sayReply('Включаю свет в ванной комнате',1);
callMethod("Switch3.turnOn");
} elseif (preg_match('/выключи/uis',$original)) {
sayReply('Выключаю свет в ванной комнате',1);
callMethod("Switch3.turnOff");
} else {
sayReply('Непонятно что со светом в ванной комнате: '.$original,1);
}
|
везде
Шаблон: (всё|весь|везде|всюду|полностью)
Код
if (preg_match('/включи/uis',$original)) {
sayReply('Включаю весь свет дома',1);
runScript('turnOn_All');
} elseif (preg_match('/выключи/uis',$original)) {
sayReply('Выключаю весь свет дома',1);
runScript('turnOff_All');
} else {
sayReply('Непонятно что со светом в квартире: '.$original,1);
}
|
зал
Код
if (preg_match('/включи/uis',$original)) {
sayReply('Включаю свет в гостиной',1);
callMethod("Switch5.turnOn");
} elseif (preg_match('/выключи/uis',$original)) {
sayReply('Выключаю свет в гостиной',1);
callMethod("Switch5.turnOff");
} else {
sayReply('Непонятно что со светом в гостиной: '.$original,1);
}
|
коридор
Шаблон: (коридоре|прихожей)
Код
if (preg_match('/включи/uis',$original)) {
sayReply('Включаю свет в коридоре',1);
callMethod("Switch1.turnOn");
} elseif (preg_match('/выключи/uis',$original)) {
sayReply('Выключаю свет в коридоре',1);
callMethod("Switch1.turnOff");
} else {
sayReply('Непонятно что со светом в коридоре: '.$original,1);
}
|
кухня
Код
if (preg_match('/включи/uis',$original)) {
sayReply('Включаю свет в кухне',1);
callMethod("Switch4.turnOn");
} elseif (preg_match('/выключи/uis',$original)) {
sayReply('Выключаю свет в кухне',1);
callMethod("Switch4.turnOff");
} else {
sayReply('Непонятно что со светом в кухне: '.$original,1);
}
|
спальня
Код
if (preg_match('/включи/uis',$original)) {
sayReply('Включаю свет в спальне',1);
callMethod("Switch6.turnOn");
} elseif (preg_match('/выключи/uis',$original)) {
sayReply('Выключаю свет в спальне',1);
callMethod("Switch6.turnOff");
} else {
sayReply('Непонятно что со светом в спальне: '.$original,1);
}
|
туалет
Код
if (preg_match('/включи/uis',$original)) {
sayReply('Включаю свет в туалете',1);
callMethod("Switch2.turnOn");
} elseif (preg_match('/выключи/uis',$original)) {
sayReply('Выключаю свет в туалете',1);
callMethod("Switch2.turnOff");
} else {
sayReply('Непонятно что со светом в: '.$original,1);
}
|
|
сказки
Код
if (preg_match('/включи/uis',$original)) {
runScript('playSkazki');
say(LANG_DONE,1);
} elseif (preg_match('/выключи/uis',$original)) {
runScript('RadioStop');
say(LANG_DONE,1);
} else {
say('Непонятно что делать: '.$original,1);
}
|
|
Говори голосом
Шаблон: (говори голосом|проснись)
Код
global $voicemode;
$voicemode='on';
setGlobal('minMsgLevel',0);
say('Хорошо.',2);
|
Давай приготовим
Шаблон: давай приготовим (.+)
Код
$queryString = $matches[1];
/*
$findParams = array(
'aerogrill' => '22', // Рецепты для аэрогриля
'waffle' => '27', // Для вафельницы
'yoghurt' => '28', // Для йогуртиницы
'multivarka' => '25', //Рецепты для мультиварки
'steamer' => '15', //Для пароварки
'pressureCooker' => '46', //Для скороварки
'breadMaker' => '23', //Для хлебопечки
'fondue' => '24' //Рецепты фондю
);
*/
$findParams = array();
$recipeNumber = rand(0, 5);
$recipesList = findRecipes($queryString, $findParams);
if (!empty($recipesList)) {
$recipe = getRecipes($recipesList[$recipeNumber]['link']);
$recipe['link'] = $recipesList[$recipeNumber]['link'];
$recipe['name'] = $recipesList[$recipeNumber]['text'];
sayRecipe($recipe);
} else {
say('Я не знаю такого рецепта.', 1);
}
function OpenRecipeURL($link) {
$rec=array();
$rec['EVENT_TYPE']='openurl'; // команда может быть ещё newwindow
$rec['WINDOW']='alice';
$rec['TERMINAL_TO']='*'; //здесь можно конкретный терминал указать
$rec['ADDED']=date('Y-m-d H:i:s');
$rec['EXPIRE']=date('Y-m-d H:i:s', time()+10);
$rec['DETAILS']=$link;
$rec['ID']=SQLInsert('events', $rec);
}
function sayRecipe($recipe) {
OpenRecipeURL($recipe['link']);
say($recipe['name'], 1);
if (!empty($recipe['description'])) {
foreach ($recipe['description'] as $e) {
say($e, 1);
}
}
$ingrstr = 'Нам понадобится: ';
foreach ($recipe['ingredients'] as $e) {
$ingrstr .= $e . ', ';
}
say($ingrstr, 1);
say('Способ приготовления:', 1);
foreach ($recipe['preparing'] as $e) {
say($e, 1);
}
}
function getRecipes($recipeLink) {
if (empty($recipeLink)) {
return FALSE;
}
$html = @file_get_contents($recipeLink);
$doc = new DOMDocument();
@$doc->loadHTML($html);
$xpath = new DOMXpath($doc);
$ingredients = array();
$description = array();
$ingredientsDom = $xpath->query('//table[@class="rec-ingred-table"]/tr');
if ($ingredientsDom->length > 0) {
foreach ($ingredientsDom as $item) {
$ingredients[] = trim(preg_replace("/[\r\n]+/", " ", $item->nodeValue));
}
$descriptionDom = $xpath->query('//div[@class="b-page_block__outside"]/p');
foreach ($descriptionDom as $item) {
$description[] = trim(preg_replace("/[\r\n]+/", " ", $item->nodeValue));
}
} else {
$ingredientsDom = $xpath->query('//div[@class="b-page_block__outside"]/p');
foreach ($ingredientsDom as $item) {
$ingredients[] = trim(preg_replace("/[\r\n]+/", " ", $item->nodeValue));
}
}
$preparingDom = $xpath->query('//div[@class="b-list__clause__text"]/p');
$preparing = array();
foreach ($preparingDom as $item) {
$preparing[] = trim(preg_replace("/[\r\n]+/", " ", $item->nodeValue));
}
$recipe = array(
'description' => $description,
'ingredients' => $ingredients,
'preparing' => $preparing
);
return $recipe;
}
function findRecipes($queryString, $params) {
if (empty($queryString)) {
return FALSE;
}
$url = 'http://www.edimdoma.ru/search?utf8=%E2%9C%93&asset=recipes&index=title_search&query=' . urlencode($queryString) . '&search%5Bmain_category_id%5D=&search%5Bcuisine_id%5D=';
if (!empty($params)) {
foreach ($params as &$value) {
$url .= '&cooking_method_ids%5B%5D=' . $value;
}
}
$url .= '&user_name=';
$html = @file_get_contents($url);
$doc = new DOMDocument();
@$doc->loadHTML($html);
$xpath = new DOMXpath($doc);
$articles = $xpath->query('//div[@class="b-page_block__header"]');
$links = array();
foreach ($articles as $container) {
$arr = $container->getElementsByTagName("a");
foreach ($arr as $item) {
if ($item->parentNode->tagName == "h2") {
$href = $item->getAttribute("href");
$text = trim(preg_replace("/[\r\n]+/", " ", $item->nodeValue));
$links[] = array(
'link' => $href,
'text' => $text
);
}
}
}
return $links;
}
|
Доброе утро
Код
callMethod('NightMode.deactivate');
runScript('morningGreeting');
|
Как тебя зовут
Шаблон: (как тебя зовут|назовись)
Код
sayReply('Меня зовут Алиса');
|
Какой сегодня день недели
Шаблон: (день недели|какой сегодня день недели|какое сегодня число)
Код
sayReply('Сегодня '.gg('ThisComputer.Date').' '.gg('ThisComputer.Day'),4);
|
Напомни через
Шаблон: напомни через (\d+) минут (.+)
Код
sayReply("Хорошо.",1);
setTimeOut('timer','sayReply("Напоминаю '.$matches[2].'",2);',$matches[1]*60);
//setTimeOut('timer','sayReplay("Напоминаю: '.$matches[4].'");',$matches[2]*60);
//sayReply ("Принято напоминание - через $matches[2] минут напомнить: $matches[4]",2);
//setTimeOut('timer','sayReplay("Напоминаю: '.$matches[4].'");',$matches[2]*60);
|
Общий контекст
|
забудь
Код
context_clear();
clearTimeOut('user_'.context_getuser().'_contexttimeout');
say('Контекст забыт.');
|
помощь|help
Код
$actions=$this->getAvailableActions();
$total=count($actions);
for($i=0;$i<$total;$i++) {
say($actions[$i]);
}
|
|
Повтори
Шаблон: (^повтори|^скажи)(\s*)(.+)
Код
|
Помолчи
Шаблон: (молчи|помолчи|усни)
Код
//global $voicemode;
//$voicemode='off';
setGlobal('minMsgLevel',1);
|
Поставь будильник
Шаблон: (поставь|установи|заведи) будильник на (.*) (часа|часов|час)(\s+)(.*)((\s+(.+)\s*(.*))|(ровно)
Код
$h=$matches[2];
if (!check_for_number($h)) {
$ddd = explode(" ", $h);
$len=count($ddd);
$h=0;
for($j=0;$j<$len;$j++) {
$n=text_to_number($ddd[$j]);
//if (!$n) {$n="0";}
if (check_for_number($n)) {$h=$h+$n;}
else {$h=$matches[2];}
}
$h=(string)$h;
}
if (strlen($h)<2) {$h="0".$h;}
$m=$matches[5];
if (!check_for_number($m)) {
$ddd = explode(" ", $m);
$len=count($ddd);
$m=0;
for($j=0;$j<$len;$j++) {
$n=text_to_number($ddd[$j]);
//if (!$n) {$n="0";}
if (check_for_number($n)) {$m=$m+$n;}
else {$m=$matches[5];}
}
$m=(string)$m;
}
if (($h>24)|(!check_for_number($h))) {
sayReply("Что это ".$h." ".$matches[3].".? И который это час по вашему.? Определитесь и сообщите снова.",1);
context_clear();
clearTimeOut('user_'.context_getuser().'_contexttimeout');
return;
}
if (($m>59)|(!check_for_number($m))) {
sayReply("Мне не понятно на сколько, в минутах, завести будильник, поэтому пусть будет ровно 00.",1);
$m="00";
}
if (!$m) {$m="00";}
if (($m<10)&($m!="00")) {$m="0".$m;}
sayReply(getRandomLine('ok')." Ставлю будильник на время ".$h." ".$matches[3]." ".$m." ".$matches[8].$matches[10],1);
setGlobal('AlarmOne.AlarmOn',1);
setGlobal('AlarmOne.AlarmTime',$h.':'.$m);
context_clear();
clearTimeOut('user_'.context_getuser().'_contexttimeout');
|
Прогноз погоды
Код
runScript('weather_forecast');
|
Расскажи или скажи
Шаблон: (^расскажи|^скажи)
Код
|
анекдот
Код
/*
1 - Анекдот;
2 - Рассказы;
3 - Стишки;
4 - Афоризмы;
5 - Цитаты;
6 - Тосты;
8 - Статусы;
11 - Анекдот (+18);
12 - Рассказы (+18);
13 - Стишки (+18);
14 - Афоризмы (+18);
15 - Цитаты (+18);
16 - Тосты (+18);
18 - Статусы (+18);
*/
function GetJoke($ctype = 1) {
$pretext = array("Слушай", "Слушай шутку", "Слушай анекдот", "Вот шутка смешная", "Еще шутка");
$number = mt_rand(0, count($pretext) - 1);
$res = geturl('http://rzhunemogu.ru/Rand.aspx?CType=' . $ctype, 0);
$res = win2utf($res);
$xml = new SimpleXMLElement($res);
$joke = trim(preg_replace('/\s{2,}/', ' ', $xml->content));
$joke = $pretext[$number] . ': ' . $joke;
if (strlen($joke) > 500) {
sleep(10);
GetJoke();
} else {
//return $joke;
//say($pretext[$number].':', 1);
say($joke, 1);
}
}
//if (gg('ThisComputer.SayJokes') != 0) {
GetJoke();
//}
|
про интернет
Код
runScript('Whose_Internet');
|
сказку
Код
|
стих
Шаблон: (стих|стишок|стихотворение)
Код
/*
1 - Анекдот;
2 - Рассказы;
3 - Стишки;
4 - Афоризмы;
5 - Цитаты;
6 - Тосты;
8 - Статусы;
11 - Анекдот (+18);
12 - Рассказы (+18);
13 - Стишки (+18);
14 - Афоризмы (+18);
15 - Цитаты (+18);
16 - Тосты (+18);
18 - Статусы (+18);
*/
function GetJoke($ctype = 3) {
$pretext = array("Слушай", "Слушай стишок", "Слушай стихотворение", "Вот стих смешной", "Еще стих");
$number = mt_rand(0, count($pretext) - 1);
$res = geturl('http://rzhunemogu.ru/Rand.aspx?CType=' . $ctype, 0);
$res = win2utf($res);
$xml = new SimpleXMLElement($res);
$joke = trim(preg_replace('/\s{2,}/', ' ', $xml->content));
$joke = $pretext[$number] . ': ' . $joke;
if (strlen($joke) > 500) {
sleep(10);
GetJoke();
} else {
//return $joke;
//say($pretext[$number].':', 1);
say($joke, 1);
}
}
//if (gg('ThisComputer.SayJokes') != 0) {
GetJoke();
//}
|
тост
Код
/*
1 - Анекдот;
2 - Рассказы;
3 - Стишки;
4 - Афоризмы;
5 - Цитаты;
6 - Тосты;
8 - Статусы;
11 - Анекдот (+18);
12 - Рассказы (+18);
13 - Стишки (+18);
14 - Афоризмы (+18);
15 - Цитаты (+18);
16 - Тосты (+18);
18 - Статусы (+18);
*/
function GetJoke($ctype = 6) {
$pretext = array("Слушай", "Слушай тост", "Еще тост");
$number = mt_rand(0, count($pretext) - 1);
$res = geturl('http://rzhunemogu.ru/Rand.aspx?CType=' . $ctype, 0);
$res = win2utf($res);
$xml = new SimpleXMLElement($res);
$joke = trim(preg_replace('/\s{2,}/', ' ', $xml->content));
$joke = $pretext[$number] . ': ' . $joke;
if (strlen($joke) > 500) {
sleep(10);
GetJoke();
} else {
//return $joke;
//say($pretext[$number].':', 1);
say($joke, 1);
}
}
//if (gg('ThisComputer.SayJokes') != 0) {
GetJoke();
//}
|
|
Сколько время
Шаблон: (сколько время|время|который час)
Код
sayReply('Сейчас '.timeNow());
|
Спокойной ночи
Шаблон: (спокойной ночи|спать пора|ночной режим)
Код
{
sayReply('Спокойной ночи, сладких снов! ',2);
callMethod('NightMode.activate');
runScript('RadioStop');
runScript('turnOff_All');
}
|
Температура дома
Шаблон: (температура).*(дом|квартир)
Код
//$t1=getGlobal('Kitchen.Temperature');
//$h1=getGlobal('Kitchen.Humidity');
$t2=getGlobal('Livingroom.Temperature');
$h2=getGlobal('Livingroom.Humidity');
sayReply ('В гостиной '.$t2.' °C, влажность '.$h2.' %',1);
|
Температура на улице
Шаблон: (температура на улице|температура за окном|погода на улице|погода за окном)
Код
sayReply("На улице по прогнозу " . gg("ow_fact.valuetemp") . "°C " . gg("ow_fact.weather_type"));
|
Что идет в кино
Шаблон: (Ч|ч)то (сейчас|идет) в (кино|кинотеатре)
Код
say("Сейчас в прокате.",2);
$url="http://api.kinopoisk.cf/getTodayFilms";
$data = json_decode(file_get_contents($url), true);
for ($i = 0; $i < count($data['filmsData']); $i++) {
$rating=$data['filmsData'][$i]['rating'];
if ($rating[0]>="6.5"){
$ratio = substr($data['filmsData'][$i]['rating'], 0,4);
say('Фильм '.$data['filmsData'][$i]['nameRU'].'. Жанр '.$data['filmsData'][$i]['genre'].'. Производство '.$data['filmsData'][$i]['country'].' Рейтинг '.$ratio.' ', 2);
}
}
|