Страница 187 из 193
Re: [Модуль] Telegram (telegram)
Добавлено: Вс авг 28, 2022 9:14 pm
Logrus
pasha413 писал(а): Чт авг 25, 2022 8:33 pm
еще вопрос, хотел сделать по аналогии с вызовом сценариев, создал команду
Графики:
Код: Выделить всё
$em_therm = json_decode('"'.'\ud83c\udf21\ufe0f'.'"'); //термометр
include_once(DIR_MODULES . 'telegram/telegram.class.php');
$telegram_module = new telegram();
//формируем массив названий кнопок, далее нужное по аналогии добавить здесь
$term = array($em_therm.'CPU',
$em_therm.'ТП',
$em_therm.'Котел',
$em_therm.'Теплица');
$total = count($term);
for($i = 0; $i < $total; $i++) {
//формируем массив кнопок с настройками, $i = 0 соответствует первой кнопке
$option[] = $this->buildInlineKeyboardButton($term[$i], '', 'CallbackChart_' . $i, '');
}
//количество кнопок в строке
$count_row = 2;
$option = array_chunk($option, $count_row);
$keyb = $this->buildInlineKeyBoard($option);
$content = array('chat_id' => $chat_id, 'text' => 'Выберите необходимый график:', 'reply_markup' => $keyb);
$this->sendContent($content);
и событие
CallbackChart_
Код: Выделить всё
if (strpos($callback, 'CallbackChart_') !== false) {
$skip = true; //не перебираем далее остальные каллбеки
//определяем параметр переданный с нажатия кнопки
$term = substr($callback, 16);
но на все кнопки приходит только первый график
если в строке из 15 символов обрезать 16 то получим ноль, логично
можно через експлоде строку разделить по подчеркиванию, в примере автора в управлении пу так можно оперировать несколькими аргументами передаваемыми в каллбек
Re: [Модуль] Telegram (telegram)
Добавлено: Ср авг 31, 2022 10:01 am
serenkyby
Знающие люди, подскажите пожалуйста, возможно ли настроить данного бота для копирования сообщений из других ботов или чатов? Есть у меня бот keenetic - он присылает различные уведомления о состоянии сети. Хочется на основе этих уведомлений что-нибудь делать. Пример: определился телефон в сети - я дома, и др. Роутер определяет наличие отсутствие очень качественно.
Re: [Модуль] Telegram (telegram)
Добавлено: Ср авг 31, 2022 10:09 am
Eraser
serenkyby писал(а): Ср авг 31, 2022 10:01 am
Знающие люди, подскажите пожалуйста, возможно ли настроить данного бота для копирования сообщений из других ботов или чатов? Есть у меня бот keenetic - он присылает различные уведомления о состоянии сети. Хочется на основе этих уведомлений что-нибудь делать. Пример: определился телефон в сети - я дома, и др. Роутер определяет наличие отсутствие очень качественно.
чем
https://connect.smartliving.ru/addons/c ... 1/251.html не угодил?
вот вроде настроили
viewtopic.php?f=24&t=1511&start=380#p131486
Re: [Модуль] Telegram (telegram)
Добавлено: Ср авг 31, 2022 10:18 am
serenkyby
Я ж не знал. Изобретал колесо. Да это то, что надо.
Re: [Модуль] Telegram (telegram)
Добавлено: Пт сен 09, 2022 4:58 pm
Bagir
А есть вариант отправить картинку, но без сохранения в файл. В примерах только из файлика. У меня сервер регистратора в браузере даст один снимок с камеры по ссылке http://<ip>/cameras/2/image
Re: [Модуль] Telegram (telegram)
Добавлено: Сб сен 10, 2022 3:02 pm
xor
Bagir писал(а): Пт сен 09, 2022 4:58 pm
А есть вариант отправить картинку, но без сохранения в файл. В примерах только из файлика. У меня сервер регистратора в браузере даст один снимок с камеры по ссылке http://<ip>/cameras/2/image
а что мешает его сохранить?
Код: Выделить всё
$snap = $this->getProperty('snapshotURL');
$fileto = DOC_ROOT."/cms/images/snapshots/cam2_".date('Y-m-d-H-i').".jpg";
$result = getURL($snap,0);
SaveFile($fileto, $result);
Re: [Модуль] Telegram (telegram)
Добавлено: Вс сен 11, 2022 10:58 am
Bagir
xor писал(а): Сб сен 10, 2022 3:02 pm
а что мешает его сохранить?
Вообще ничто не мешает. Просто может быть это лишний шаг, и можно сразу пульнуть картинку, взятую по адресу регистратора. Я с картинками крайне мало работал.
Re: [Модуль] Telegram (telegram)
Добавлено: Пн сен 12, 2022 8:05 am
Bagir
А вообще прикольно, жмешь на кнопку звонка и фотка прилетает в телеграмм
Re: [Модуль] Telegram (telegram)
Добавлено: Вт ноя 22, 2022 9:03 pm
bartwell
Использую модуль Телеграмм кодом:
Код: Выделить всё
include_once(DIR_MODULES . 'telegram/telegram.class.php');
$telegram_module = new telegram();
$telegram_module->sendMessageToAll($text, null, '', !$isImportant);
Что пытаюсь добиться: чтобы для важных сообщений был и звук, и всплывающее сообщение. Для всех остальных - ни звука, ни всплывающего сообщения быть не должно.
Что происходит на самом деле:
- Если уведомления для в Телеграмме ВКЛючены - всплывающие сообщения показываются всегда
- Если уведомления для в Телеграмме ВЫКЛючены - всплывающие сообщения показываются всегда.
Последний параметр (true/false) на это поведение никак не влияет.
Вопрос: как управлять всплывающими сообщениями?
Re: [Модуль] Telegram (telegram)
Добавлено: Вс ноя 27, 2022 7:16 pm
pasha413
Может кому будет интересны такие телеграмм команды, кое что было доработано под мои потребности.
Включение/выключение котла (с автоудалением команды и сообщения):
команда
Код: Выделить всё
$on = json_decode('"'.'\uD83C\uDF15'.'"');
$off = json_decode('"'.'\ud83c\udf11'.'"');
//$boiler = $off; // на всякий случай пишем сначала что выключен
if (gg("Boiler.disabled") == 0) { // если блокировка котла выключена
$boiler = $on; // то пишем ON
$status = "Котел включен"; // пишем
}
if (gg("Boiler.disabled") == 1) { // если блокировка включена
$boiler = $off; // то пишем off
$status = "Котел выключен"; // пишем
}
//$option = array(array($this->buildInlineKeyboardButton($text=$boiler."Котёл вкл/выкл","","CallbackBoiler_","")));
$option = array(array($this->buildInlineKeyboardButton($text=$boiler.$status,"","CallbackBoiler_","")));
$keyb = $this->buildInlineKeyBoard($option);
$content = array('chat_id' => $chat_id, 'text' => "Управление работой котла:", 'reply_markup' => $keyb);
//$this->sendContent($content);
// удаляем сообщение с командой через 5 секунд
$res = $this->sendContent($content);
$message_id = $res["result"]["message_id"];
sleep(5);
$res = $this->deleteMessage($chat_id, $message_id);
$this->deleteMessage($chat_id, $data['message']['message_id']);
событие Callback
Код: Выделить всё
$sw = false;
if ($callback == 'CallbackBoiler_') {
$skip = true; // не перебираем далее остальные каллбеки
$sw = true;
// if (gg("Boiler.disabled") == 0) cm("Boiler.disable"); // если блокировка выключена, то включаем
// elseif (gg("Boiler.disabled") == 1) cm("Boiler.enable");
cm("Boiler.switchEnable"); // меняем состояние работы котла вкл, либо выкл
}
if ($sw) { // чтобы не отображалось при вызове других калбеков
$on = json_decode('"'.'\uD83C\uDF15'.'"');
$off = json_decode('"'.'\ud83c\udf11'.'"');
// $boiler = $off; // на всякий случай пишем сначала что выключен
if (gg("Boiler.disabled") == 0) { // если блокировка выключена
$boiler = $on; // то пишем on
$status = "Котел включен"; // пишем
} elseif (gg("Boiler.disabled") == 1) { // если блокировка включена
$boiler = $off; // то пишем off
$status = "Котел выключен"; // пишем
}
$option = array(array($this->buildInlineKeyboardButton($text=$boiler.$status, "","CallbackBoiler_", "")));
$keyb = $this->buildInlineKeyBoard($option);
$this->sendAnswerCallbackQuery($callback_id, $status, false); // формируем всплывающее сообщение с названием скрипта
$this->editMessage($chat_id, $message_id, "Управление работой котла:", $keyb);
}
Графики:
команда
Код: Выделить всё
$em_therm = json_decode('"'.'\ud83c\udf21\ufe0f'.'"'); // термометр
//формируем массив названий кнопок
$term = array($em_therm.' CPU',
$em_therm.' Дома',
$em_therm.' Котла',
$em_therm.' ТП',
$em_therm.' Термостата',
$em_therm.' Теплице'
);
$total = count($term);
for($i = 0; $i < $total; $i++) { // формируем массив кнопок с настройками, $i = 0 соответствует первой кнопке
$option[] = $this->buildInlineKeyboardButton($term[$i], '', 'CallbackChart_' . $i, '');
}
$count_row = 2; // количество кнопок в строке
$option = array_chunk($option, $count_row);
$keyb = $this->buildInlineKeyBoard($option);
$content = array('chat_id' => $chat_id, 'text' => 'Выберите необходимый двухдневный график:', 'reply_markup' => $keyb);
//$this->sendContent($content);
// удаляем сообщение и команду через 5 секунд
$res = $this->sendContent($content);
$message_id = $res["result"]["message_id"];
sleep(5);
$res = $this->deleteMessage($chat_id, $message_id);
$this->deleteMessage($chat_id, $data['message']['message_id']);
событие Callback
Код: Выделить всё
if (strpos($callback, 'CallbackChart_') !== false) {
$skip = true; //не перебираем далее остальные каллбеки
//определяем параметр переданный с нажатия кнопки
include_once(DIR_MODULES . 'charts/charts.class.php');
$charts = new charts();
$em_therm = json_decode('"'.'\ud83c\udf21\ufe0f'.'"'); //термометр
$term = substr($callback, 14);
switch ($term) {
case '0':
//соответствует первой кнопке
$chartPNG = $charts->getImage(1);
$text = $em_therm." CPU: ".gg('TempCPUcore0.value')."°C";
rs('sendTelegram', array("user"=>$chat_id, "img"=>ROOT.$chartPNG, "description"=>$text));
break;
case '1':
$chartPNG = $charts->getImage(2);
// $text = $em_therm." Холл 1: ".gg('TempHall1.value')."°C, ".$em_therm." Холл 2: ".gg('TempHall2.value')."°C\r\n".$em_therm." Пола в холле 1: ".gg('TempFloor.value')."°C";
$text = $em_therm." Холл 1: ".gg('TempHall1.value')."°C, ".$em_therm." Холл 2: ".gg('TempHall2.value')."°C";
rs('sendTelegram', array("user"=>$chat_id, "img"=>ROOT.$chartPNG, "description"=>$text));
break;
case '2':
$chartPNG = $charts->getImage(3);
$text = $em_therm." Прямой котла: ".gg('TempBoilerFeed.value')."°C\r\n".$em_therm." Обратки котла: ".gg('TempBoilerReturn.value')."°C";
rs('sendTelegram', array("user"=>$chat_id, "img"=>ROOT.$chartPNG, "description"=>$text));
break;
case '3':
$chartPNG = $charts->getImage(4);
$text = $em_therm." Прямой ТП: ".gg('TempCollectorFeed.value')."°C\r\n".$em_therm." Обратки ТП: ".gg('TempCollectorReturn.value')."°C";
rs('sendTelegram', array("user"=>$chat_id, "img"=>ROOT.$chartPNG, "description"=>$text));
break;
case '4':
$chartPNG = $charts->getImage(7);
$text = $em_therm." Термостата: ".gg('Boiler.value')."°C";
rs('sendTelegram', array("user"=>$chat_id, "img"=>ROOT.$chartPNG, "description"=>$text));
break;
case '5':
$chartPNG = $charts->getImage(5);
$text = $em_therm." В теплице: ".gg('TempGreenhouse.value')."°C";
rs('sendTelegram', array("user"=>$chat_id, "img"=>ROOT.$chartPNG, "description"=>$text));
break;
default:
}
//формируем всплывающее сообщение с названием скрипта
// $this->sendAnswerCallbackQuery($callback_id, $script, false);
}
Сценарии (с автоудалением команды и сообщения):
команда
Код: Выделить всё
//https://github.com/wooorm/gemoji/blob/main/support.md
$em_stop = json_decode('"'.'\ud83d\uded1'.'"'); //stop
$em_warning = json_decode('"'.'\u26a0\ufe0f'.'"'); //off
// формируем массив названий кнопок
$scripts = array($em_warning.' restart cycles',
$em_warning.' reboot system',
$em_warning.' reboot router',
$em_stop.' shutDown '.$em_stop);
$total = count($scripts);
for($i = 0; $i < $total; $i++) {
// формируем массив кнопок с настройками, $i = 0 соответствует первой кнопке
$option[] = $this->buildInlineKeyboardButton($scripts[$i], '', 'CallbackScripts_' . $i, '');
}
$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); // заменил автоудалением
// удаляем сообщение и команду через 5 секунд
$res = $this->sendContent($content);
$message_id = $res["result"]["message_id"];
sleep(5);
$res = $this->deleteMessage($chat_id, $message_id);
$this->deleteMessage($chat_id, $data['message']['message_id']);
событие Callback
Код: Выделить всё
if (strpos($callback, 'CallbackScripts_') !== false) {
$skip = true; // не перебираем далее остальные каллбеки
$scripts = substr($callback, 16); // определяем параметр переданный с нажатия кнопки
switch ($scripts) {
case '0':
//соответствует первой кнопке
$script = 'restartCycles';
break;
case '1':
$script = 'rebootSystem';
break;
case '2':
$script = 'rebootRoter';
break;
case '3':
$script = 'shutDown';
break;
case '4':
break;
default:
}
$this->sendAnswerCallbackQuery($callback_id, $script, false); // формируем всплывающее сообщение с названием скрипта
runScriptSafe($script); // выполняем заданный скрипт
}
Режимы (с автоудалением команды и сообщения):
кстати, тут я не понял как сменить иконки около режимов работы на свои...
команда
Код: Выделить всё
//https://connect.smartliving.ru/profile/186/blog/pereklyuchenie-rejimov-operationalmodes-v-telegram.html
$this->sendAction($chat_id);
$on = json_decode('"'.'\uD83C\uDF15'.'"');
$off = json_decode('"'.'\ud83c\udf11'.'"');
$ecoON = json_decode('"'.'\ud83d\udc9a'.'"');
$ecoOFF = json_decode('"'.'\ud83e\udd0d'.'"');
$nobodyON = json_decode('"'.' '.'"');
$nobodyOFF = json_decode('"'.' '.'"');
$alarmON = json_decode('"'.' '.'"');
$alarmOFF = json_decode('"'.' '.'"');
$guestON = json_decode('"'.' '.'"');
$guestOFF = json_decode('"'.' '.'"');
$darktON = json_decode('"'.' '.'"');
$darkOFF = json_decode('"'.' '.'"');
$nightON = json_decode('"'.'\ud83c\udf19'.'"');
$nightOFF = json_decode('"'.'\u2600\ufe0f'.'"');
$objects=getObjectsByClass("OperationalModes");
foreach($objects as $obj) {
if (gg($obj['TITLE'].".hide")!=1) {
$state = $off;
if (gg($obj['TITLE'].".active") == 1) $state = $on;
$option[] = $this->buildInlineKeyboardButton($text=$state.gg($obj['TITLE'].".title"),"","CallbackMode_".$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, 'parse_mode' => 'HTML');
// удаляем сообщение и команду через 5 секунд
$res = $this->sendContent($content);
$message_id = $res["result"]["message_id"];
sleep(5);
$res = $this->deleteMessage($chat_id, $message_id);
$this->deleteMessage($chat_id, $data['message']['message_id']);
событие Callback
Код: Выделить всё
$sw = false;
$on = hex2bin('F09F8C95');
$off = hex2bin('F09F8C91');
if (strpos($callback, 'CallbackMode_') !== false) {
$sw = true;
$skip = true;
$obj = substr($callback, 13);
$text = gg($obj.".title");
cm($obj.".switch");
if (gg($obj.".active") == 1) $text .= " включен ". $on;
else $text.= " выключен ". $off;
$this->sendAnswerCallbackQuery($callback_id,$text, false);
}
if ($sw) { //чтобы не отображалось при вызове других калбеков
$objects=getObjectsByClass("OperationalModes");
foreach($objects as $obj) {
if (gg($obj['TITLE'].".hide")!=1) {
$state = $off;
if (gg($obj['TITLE'].".active") == 1) $state = $on;
$option[] = $this->buildInlineKeyboardButton($text=$state.gg($obj['TITLE'].".title"),"","CallbackMode_".$obj['TITLE'],"");
}
}
$count_row = 3;
$option = array_chunk($option, $count_row);
$keyb = $this->buildInlineKeyBoard($option);
$this->editMessage($chat_id,$message_id,"Режимы:",$keyb);
}