Kvantos писал(а): ↑Вт май 07, 2019 12:44 pm
Eraser писал(а): ↑Вс окт 16, 2016 11:22 am
Вот еще одно довольно интересное решение интерактивной клавиатуры:
Тут на телеге подсказали как усовершенствовать немного (была проблема, в том что после первого нажатия кнопки меню статус не успевает поменяться и отображение текущего статуса невозможно), вот доработанный код, может пригодится. Было бы неплохо ссылку из шапки на него тоже сделать:
Команда "Освещение":
Код: Выделить всё
$off = json_decode('"'.'\ud83c\udf11'.'"');
$on = json_decode('"'.'\uD83C\uDF15'.'"');
$ts = $off;
$ks = $off;
if (gg("Switch01.status") == 1) {$ts = $on;}
if (gg("RGB01.status") == 1) {$ks = $on;}
$option = array(array($this->buildInlineKeyboardButton($text=$ts."Коридор","","Callback_Switch01",""),$this->buildInlineKeyboardButton($text=$ks."Подсветка в зале","","Callback_RGB01","") ) );
$keyb = $this->buildInlineKeyBoard($option);
$content = array('chat_id' => $chat_id, 'text' => "Управление светом:", 'reply_markup' => $keyb);
$this->sendContent($content);
Событие "Callback_light":
Код: Выделить всё
$off = json_decode('"'.'\ud83c\udf11'.'"');
$on = json_decode('"'.'\uD83C\uDF15'.'"');
$ts = $off;
$ks = $off;
$sw = false;
if ($callback == 'Callback_Switch01') {
$sw = true;
if (gg("Switch01.status") == 1) { $ts = $off; }
else { $ts = $on; }
cm("Switch01.switch");
}
if ($callback == 'Callback_RGB01') {
$sw = true;
if (gg("RGB01.status") == 1) { $ks = $off; }
else { $ks = $on; }
cm("RGB01.switch");
}
if ($sw) {
$option = array(array($this->buildInlineKeyboardButton($text=$ts."Коридор","","Callback_Switch01",""),
$this->buildInlineKeyboardButton($text=$ks."Подсветка в зале","","Callback_RGB01","") ) );
$keyb = $this->buildInlineKeyBoard($option);
$this->editMessage($chat_id,$message_id,"Управление светом:",$keyb);
}
Подскажите раз у вас получилось.. что нужно поменять в моем коде что бы сразу менялся статус???
Команда свет вот такой код
$off = hex2bin('F09F8C91');
$on = hex2bin('F09F8C95');
$objects=getObjectsByClass("SControllers");
print_r($objects);
foreach($objects as $obj) {
$state = $off;
if (gg($obj['TITLE'].".status") == 1)
$state = $on;
$option[] = $this->buildInlineKeyboardButton($text=$state.getObject($obj['TITLE'])->description,"","CallbackSwitch_".$obj['TITLE'],"");
}
$count_row = 3;
$option = array_chunk($option, $count_row);
$keyb = $this->buildInlineKeyBoard($option);
$content = array('chat_id' => $chat_id, 'text' => "Управление светом:", 'reply_markup' => $keyb);
$this->sendContent($content);
callback
$off = hex2bin('F09F8C91');
$on = hex2bin('F09F8C95');
if (strpos($callback, 'CallbackSwitch_') !== false) {
$skip = true;
$obj = substr($callback, 15);
$text = getObject($obj)->description;
cm($obj.".switch");
if (gg($obj.".status") == 1)
$text .= " выключен ". $off;
else
$text .= " включен ". $on;
$this->sendAnswerCallbackQuery($callback_id,$text, false);
}
Заранее благодарен за ответ)