Страница модуля
Группа Вконтакте
Возможности модуля:
- отправка сообщений;
- обработка команд;
- отправка изображений;
- формирование клавиатуры.
Модератор: immortal
Проговаривает текст после слова "Скажи". Все корректно работает. В данном примере уровень важности сообщений установлен 5. Можно ставить любой, можно сделать несколько событий в которых после "Скажи" без пробела установить уровень важности.$var = explode(" ", $text,2);
if(!empty($var)){
if($var[0] == "Скажи") say($var[1],5);
}
$skip=true;
Вариант, подправленный ИИ$var = explode(" ", $text,2);
if(!empty($var)){
if($var[0] == "Скажи2") say($var[1],2);
}
$skip=true;
$var = explode(" ", $text, 2);
if (!empty($var) && isset($var[1])) {
// Приводим команду к нижнему регистру для надежности
$command = mb_strtolower($var[0]);
if ($command == "скажи") {
say($var[1], 5);
$skip = true; // Игнорируем дальнейшую обработку этого сообщения
}
}
Код: Выделить всё
callSD_home_0Код: Выделить всё
if (strpos($callback, 'callSD_') !== false) {
$skip = true;
$attachments = array();
//разбираем строку на составляющие
$cmd = explode("_", $callback);
$title_kb = "";
if ($cmd[1] == 'home'){
$run = hex2bin('F09F8F83');
$rooms = getObjectsByClass("Rooms");
$title_kb = "<b>"."Комнаты"."</b>";
foreach ($rooms as $room) {
$room_text= getObject($room['TITLE'])->description;
if (gg($room['TITLE'].".SomebodyHere")==1) $room_text.= " ".$run;
$buttons[] = $this->buildKeyBoardButton($room_text,'callback',"callSD_room_".$room['TITLE']."_".$cmd[2], 'primary');
}
//так как максимально количество кнопок - 10, разбиваем кнопки на "страницы" и подгружаем необходимую, передавая во все кнопки номер текущей страницы
$buttons_all = $buttons;
if(count($buttons_all) > 8) {
//если страниц больше одной, разбиваем массив кнопок на страницы
$buttons_pages = array_chunk(array_slice($buttons_all, 9), 8);
//на первой странице 9 кнопок, место для кнопки "Далее" или "Выход"
if($cmd[2] == 0) $buttons = array_slice($buttons_all, 0, 9);
//для остальных 8 кнопок берем из подкотовленного массива, место для кнопок "Назад" и "Далее"
else $buttons = $buttons_pages[$cmd[2]-1];
//если это не первая страница - делаем кнопку "Назад"
if($cmd[2] != 0)$buttons[] = $this->buildKeyBoardButton("Назад",'callback', 'callSD_home_'.$cmd[2]-1, 'secondary');
//если не последняя - делаем кнопку "Вперёд"
if (isset($buttons_pages[$cmd[2]]))$buttons[] = $this->buildKeyBoardButton("Далее",'callback', 'callSD_home_'.$cmd[2]+1, 'secondary');
}
//если на странице меньше 10 кнопок, то есть страница последняя, добавляем кнопку "Выход"
if(count($buttons) < 10) $buttons[] = $this->buildKeyBoardButton("Выход",'callback', 'callSD_exit', 'negative');
}
else if ($cmd[1] == 'room' or $cmd[1] == 'device' or $cmd[1] == 'lock'){
$room = $cmd[2];
$off = hex2bin('F09F8C91');
$on = hex2bin('F09F8C95');
if ($cmd[1] == 'device' or $cmd[1] == 'lock'){
if ($cmd[1] == 'device'){
$text = getObject($cmd[2])->description;
if (gg($cmd[2].".status") == 1) $text .= " выключен ". $off;
else $text .= " включен ". $on;
} else if ($cmd[1] == 'lock'){
if (gg($cmd[2].".lockstatus")) $text .= "Замок открыт ". hex2bin('F09F9493');
else $text .= "Замок закрыт ". hex2bin('F09F9492');
}
cm($cmd[2].".switch");
$this->sendAnswerCallbackQuery($user_id, $event_id, $text);
$room = gg($cmd[2].".linkedRoom");
}
// кнопки устройств в комнате
$title_kb = "<b>".gg($room.".Title")."</b>";
$temp = '';
$humidity = '';
$co2 = '';
$door = '';
$objects = getObjectsByProperty("linkedRoom", "=", $room);
foreach($objects as $object) {
$device = SQLSelectOne("SELECT * FROM devices WHERE LINKED_OBJECT='".$object."'");
if($device['TYPE'] == 'sensor_temp' or $device['TYPE'] == 'sensor_temphum') $temp.= gg($object.'.value')."°C ";
if($device['TYPE'] == 'sensor_humidity') $humidity.= gg($object.'.value')."% ";
else if($device['TYPE'] == 'sensor_temphum') $humidity.= gg($object.'.valueHumidity')."% ";
else if($device['TYPE'] == 'sensor_co2') $co2.= gg($object.'.value')."ppm ";
else if($device['TYPE'] == 'openclose' or $device['TYPE'] == 'unlockable'){
$oc = gg($object . '.ncno') == 'nc' ? 1 - gg($object . '.status') : gg($object . '.status');
if($oc) $door.=' Открыта';
else $door.=' Закрыта';
if($device['TYPE'] == 'unlockable'){
if(gg($object . '.lockstatus')){
$state = hex2bin('F09F9492');
$color = 'negative';
} else {
$state = hex2bin('F09F9493');
$color = 'positive';
}
$buttons[] = $this->buildKeyBoardButton($state.$device['TITLE'], 'callback', "callSD_lock_".$object."_".$cmd[3], $color);
}
}
else if($device['TYPE'] == 'relay' or $device['TYPE'] == 'dimmer' or $device['TYPE'] == 'rgb' or $device['TYPE'] == 'openable'){
$state = $off;
$color = 'primary';
if($device['TYPE'] == 'openable') $status = !gg($object . '.status');
else $status = gg($object.".status");
if ($status){
$state = $on;
$color = 'positive';
}
$buttons[] = $this->buildKeyBoardButton($state.$device['TITLE'], 'callback', "callSD_device_".$object."_".$cmd[3], $color);
} else if($device['TYPE'] == 'camera'){
$buttons[] = $this->buildKeyBoardButton(hex2bin('F09F8EA5').$device['TITLE'], 'callback', "callSD_camera_".$object."_".$cmd[3]."_".$cmd[2], 'primary');
}
}
if($temp != '') $title_kb .= "\n".hex2bin('F09F8CA1')." ".$temp;
if($humidity != '') $title_kb .= "\n".hex2bin('F09F92A6')." ".$humidity;
if($co2 != '') $title_kb .= "\nCO2 ".$co2;
if($door != '') $title_kb .= "\n".hex2bin('F09F9AAA')." ".$door;
$buttons[] = $this->buildKeyBoardButton("Назад",'callback', 'callSD_home_'.$cmd[3], 'secondary');
$buttons[] = $this->buildKeyBoardButton("Выход",'callback', 'callSD_exit', 'negative');
}
else if ($cmd[1] == 'camera') {
$this->sendAction($chat_id,"photo");
$title_kb = "<b>".$cmd[2]."</b>";
$url = BASE_URL.gg($cmd[2].".snapshotPreviewURL");
$image_path = CASH_PATH.$cmd[2].".jpg";
$this->writeLog($image_path);
try {
$data = file_get_contents($url);
$i = strlen($data);
$handle = fopen($image_path, "w");
fwrite($handle, $data);
fclose($handle);
} catch (Exception $e) {
echo 'Caught exception: ', $e->getMessage(), "\n";
}
$buttons[] = $this->buildKeyBoardButton("Назад",'callback', 'callSD_room_'.$cmd[4].'_'.$cmd[3], 'secondary');
$buttons[] = $this->buildKeyBoardButton("Выход",'callback', 'callSD_exit', 'negative');
$attachments = $this->attachPhoto($this->config['GROUP_ID'], $image_path);
}
if ($cmd[1] == 'exit'){
$this->messageDelete($user_id, $message_id);
} else {
$keyboard = $this->buildInlineKeyBoard($buttons, 22222);
//если нет $message_id, значит вызов не из инлайн-клавиатуры - отправляем сообщение
if(empty($message_id)) $this->sendMessage($user_id, $title_kb, $keyboard, '', $attachments);
//иначе - редактируем сообщение
else $this->messageEdit($user_id, $message_id, $title_kb, $keyboard, '', $attachments);
}
}
Код: Выделить всё
$button1 = "svetTeh";
$button2 = "Relay12";
$off = hex2bin('F09F8C91');
$on = hex2bin('F09F8C95');
$ts = $off;
$ks = $off;
$sc = 'negative';
$nc = 'negative';
if (gg($button1.".status")){
$ts = $on;
$sc = 'positive';
}
if (gg( $button2.".status")){
$ks = $on;
$nc = 'positive';
}
$buttons[] = $this->buildKeyBoardButton('Свет ' . $ts, 'callback', $button1, $sc);
$buttons[] = $this->buildKeyBoardButton('Настолка ' . $ks, 'callback', $button2, $nc);
$buttons[] = $this->buildKeyBoardButton('Выход', 'callback', 'svet_exit', 'primary');
$keyboard = $this->buildInlineKeyBoard($buttons, 21);
$this->sendMessageToUser($user_id, "Управление светом:", $keyboard);
Код: Выделить всё
if (strpos($callback, 'svet_') !== false) {
$button1 = "svetTeh";
$button2 = "Relay12";
if($callback !='svet_exit'){
$cmd = explode("_", $callback);
cm($cmd[1].'.switch');
$off = json_decode('"'.'\ud83c\udf11'.'"');
$on = json_decode('"'.'\uD83C\uDF15'.'"');
$ts = $ks = $off;
$sc = $nc = 'negative';
$event = 'выключен! ' . $off;
if (gg($button1.".status")){
$ts = $on;
$sc = 'positive';
$event = 'включен! ' . $on;
}
if (gg($button2.".status")){
$ks = $on;
$nc = 'positive';
$event = 'включен! ' . $on;
}
$this->sendAnswerCallbackQuery($user_id, $event_id, "Свет ".$event);
$buttons[] = $this->buildKeyBoardButton('Свет ' . $ts, 'callback', "svet_".$button1, $sc);
$buttons[] = $this->buildKeyBoardButton('Настолка ' . $ks, 'callback', "svet_".$button2, $nc);
$buttons[] = $this->buildKeyBoardButton('Выход', 'callback', 'svet_exit', 'primary');
$keyboard = $this->buildInlineKeyBoard($buttons, 21);
$this->messageEdit($user_id, $message_id, "Управление светом:", $keyboard);
}
else $this->messageDelete($user_id, $message_id);
}