[Модуль] Telegram (telegram)

Разработка дополнительных модулей, подключение различных приложений.

Модератор: immortal

Plug
Сообщения: 106
Зарегистрирован: Сб янв 20, 2018 12:33 am
Благодарил (а): 42 раза
Поблагодарили: 7 раз

Re: [Модуль] Telegram (telegram)

Сообщение Plug » Ср окт 23, 2019 4:12 pm

Добрый день!
Не получается разбить массив (кнопки):
Команда

Код: Выделить всё

$off = json_decode('"'.'\ud83c\udf11'.'"');
$on = json_decode('"'.'\uD83C\uDF15'.'"');
$ss = $off;
$gs = $off;
$ds = $off;
$ps = $off;
$ks = $off;
if (gg("Relay02.status") == 1) {$ss = $on;} //Спальня
if (gg("Relay01.status") == 1) {$gs = $on;} //Гостиная
if (gg("Relay04.status") == 1) {$ds = $on;} //Детская
if (gg("Relay06.status") == 1) {$ps = $on;} //Прихожая
if (gg("Relay07.status") == 1) {$ks = $on;} //Коридор
$option = array(array($this->buildInlineKeyboardButton($text=$ss."Спальня","","Callback_Relay02",""),
                      $this->buildInlineKeyboardButton($text=$gs."Гостиная","","Callback_Relay01",""),
                      $this->buildInlineKeyboardButton($text=$ds."Детская","","Callback_Relay04",""),
                      $this->buildInlineKeyboardButton($text=$ps."Прихожая","","Callback_Relay06",""),
                      $this->buildInlineKeyboardButton($text=$ks."Коридор","","Callback_Relay07","")
                     ) );
$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');
$this->sendContent($content);
Событие

Код: Выделить всё

$off = json_decode('"'.'\ud83c\udf11'.'"');
$on = json_decode('"'.'\uD83C\uDF15'.'"');
$ss = $off;
$gs = $off;
$ds = $off;
$ps = $off;
$ks = $off;
$sw = false;
// Спальня
if ($callback == 'Callback_Relay02') {
    $sw = true;
    if (gg("Relay02.status") == 1) { $ss = $off; }
    else { $ss = $on; }
    cm("Relay02.switch");
}

// Гостиная
if ($callback == 'Callback_Relay01') {
    $sw = true;
    if (gg("Relay01.status") == 1) { $gs = $off; }
    else { $gs = $on; }
    cm("Relay01.switch");
}

// Детская
if ($callback == 'Callback_Relay04') {
    $sw = true;
    if (gg("Relay04.status") == 1) { $ds = $off; }
    else { $ds = $on; }
    cm("Relay04.switch");
}
// Прихожая
if ($callback == 'Callback_Relay06') {
    $sw = true;
    if (gg("Relay06.status") == 1) { $ps = $off; }
    else { $ps = $on; }
    cm("Relay06.switch");
}
// Коридор
if ($callback == 'Callback_Relay07') {
    $sw = true;
    if (gg("Relay07.status") == 1) { $ks = $off; }
    else { $ks = $on; }
    cm("Relay07.switch");
}
if ($sw) {
$option = array(array($this->buildInlineKeyboardButton($text=$ss."Спальня","","Callback_Relay02",""),
                        $this->buildInlineKeyboardButton($text=$gs."Гостиная","","Callback_Relay01",""),
                        $this->buildInlineKeyboardButton($text=$ds."Детская","","Callback_Relay04",""),
                      $this->buildInlineKeyboardButton($text=$ps."Прихожая","","Callback_Relay06",""),
                      $this->buildInlineKeyboardButton($text=$ks."Коридор","","Callback_Relay07","")
                     ) );
$count_row = 3;
$option = array_chunk($option, $count_row);
$keyb = $this->buildInlineKeyBoard($option);
$this->editMessage($chat_id,$message_id,"Управление светом:",$keyb);
}
В таком виде в Телеграм ничего не выводит. Если закоментить строки:
$count_row = 3;
$option = array_chunk($option, $count_row);
то выводит все кнопки одной строкой. Помогите я в PHP совсем не силен (пытался сделать по примерам здесь и по документации PHP)
Stor
Сообщения: 133
Зарегистрирован: Ср окт 31, 2018 11:45 pm
Благодарил (а): 8 раз
Поблагодарили: 4 раза

Re: [Модуль] Telegram (telegram)

Сообщение Stor » Ср окт 23, 2019 10:02 pm

Stor писал(а):
Вт окт 22, 2019 8:59 pm
Stor писал(а):
Пн окт 21, 2019 10:29 pm
miks69 писал(а):
Пн окт 21, 2019 7:34 pm
Добрый день, долгое время все работало без проблем и замечаний, но со вчерашего дня неожиданно перестали приходить сообщения, хотя в истории пишет, что сообщение отправлено. Никаких других видимых проблем не наблюдается. Сам Телеграмм на теелфоне работает без проблем. Пробовал перезапускать, не помогает. Подскажите, в чем может быть проблема?
Аналогично, все работало, а с недавнего времени появились проблемы: сообщения из МД в телегу приходят, а вот из телеги в МД не залетают. Проксб настраивал так - viewtopic.php?t=2768&start=1120

Код: Выделить всё

sudo apt-get install tor tor-geoipdb privoxy
Просьба помочь разобраться, почему модуль работает только в направлении из МД в телегу, но в МД сообщения не залетают.
Так и не смог понять в чем была причина.
Решил проблему так:
1) Удалил модуль через МД
2) Нашел все файлы telegram* в директории /var/www и удалил их
3) Перезагрузил МД
4) Установил из маркета модуль
5) Внес все необходимые данные (токен, проски и пр.) и пользователя

И все снова заработало как надо.
Plug
Сообщения: 106
Зарегистрирован: Сб янв 20, 2018 12:33 am
Благодарил (а): 42 раза
Поблагодарили: 7 раз

Re: [Модуль] Telegram (telegram)

Сообщение Plug » Чт окт 24, 2019 2:45 pm

Plug писал(а):
Ср окт 23, 2019 4:12 pm
В таком виде в Телеграм ничего не выводит. Если закоментить строки:
$count_row = 3;
$option = array_chunk($option, $count_row);
то выводит все кнопки одной строкой. Помогите я в PHP совсем не силен (пытался сделать по примерам здесь и по документации PHP)
Сам разобрался. В строке:
$option = array(array($this->buildInlineKeyboardButton($text=$ss."Спальня","","Callback_Relay02",""),

задублировано создание массива. Удалил один array и все заработало. Но столкнулся с тем что некорректно отображает вкл/выкл свет на кнопках. Т.е.: предположим весь свет выключен, я включаю свет в Спальне (все отображается корректно - свет в спальне включен в остальных местах выключен), далее я включаю свет в гостиной (отображается - свет в гостиной включен, а в спальне выключен (хотя по факту включен)). Никто с таким не сталкивался?
За это сообщение автора Plug поблагодарил:
viktor6 (Пн окт 28, 2019 11:28 pm)
Рейтинг: 1.23%
Аватара пользователя
Eraser
Сообщения: 963
Зарегистрирован: Вт окт 21, 2014 7:31 pm
Откуда: Киров
Благодарил (а): 13 раз
Поблагодарили: 721 раз
Контактная информация:

Re: [Модуль] Telegram (telegram)

Сообщение Eraser » Пт окт 25, 2019 10:21 am

Управляем телевизором из телеграм

По команде TV выдается клавиатура с заданными каналами, кнопкой вкл/выкл и кнопкой обновления информации
В команде задаются кнопки каналов( CallbackTV_номер), вы можете задать свои

PS Не забудьте поменять имя обьекта
2019-10-25_10-02-57.png
2019-10-25_10-02-57.png (72.69 КБ) 1149 просмотров
2019-10-25_10-04-15.png
2019-10-25_10-04-15.png (119.77 КБ) 1149 просмотров
Вложения
Event_Telegram_CallbackTV.txt
(1.46 КБ) 170 скачиваний
Command_Telegram_TV.txt
(1.5 КБ) 175 скачиваний
За это сообщение автора Eraser поблагодарили (всего 2):
xor (Пт окт 25, 2019 12:04 pm) • Logrus (Чт май 07, 2020 8:36 am)
Рейтинг: 2.47%
Connect ---- Telegram
Яндекс.Деньги для благодарностей за помощь: 410012076838296 или нажмите кнопку "Спасибо"!!! :D
Plug
Сообщения: 106
Зарегистрирован: Сб янв 20, 2018 12:33 am
Благодарил (а): 42 раза
Поблагодарили: 7 раз

Re: [Модуль] Telegram (telegram)

Сообщение Plug » Вт окт 29, 2019 2:26 pm

Итого: с помощью автора модуля удалось сделать так как хотелось. Выкладываю что получилось.
Команда:

Код: Выделить всё

$off = json_decode('"'.'\ud83c\udf11'.'"');
$on = json_decode('"'.'\uD83C\uDF15'.'"');
$ss = $off;
$gs = $off;
$ds = $off;
$ps = $off;
$ks = $off;
$shs = $off;
$kls = $off;
if (gg("Relay02.status") == 1) {$ss = $on;} //Спальня
if (gg("Relay01.status") == 1) {$gs = $on;} //Гостиная
if (gg("Relay04.status") == 1) {$ds = $on;} //Детская
if (gg("Relay06.status") == 1) {$ps = $on;} //Прихожая
if (gg("Relay07.status") == 1) {$ks = $on;} //Коридор
if (gg("Relay05.status") == 1) {$shs = $on;} //Шкаф детская
if (gg("Relay03.status") == 1) {$kls = $on;} //Кладовка
$option = array(array($this->buildInlineKeyboardButton($text=$ss."Спальня","","Callback_Relay02",""),
                      $this->buildInlineKeyboardButton($text=$gs."Гостиная","","Callback_Relay01",""),
                      $this->buildInlineKeyboardButton($text=$ds."Детская","","Callback_Relay04","")),
                array($this->buildInlineKeyboardButton($text=$ps."Прихожая","","Callback_Relay06",""),
                      $this->buildInlineKeyboardButton($text=$ks."Коридор","","Callback_Relay07",""),
                      $this->buildInlineKeyboardButton($text=$shs."Шкаф детская","","Callback_Relay05","")),
                array($this->buildInlineKeyboardButton($text=$kls."Кладовка","","Callback_Relay03","")
                     ));
$keyb = $this->buildInlineKeyBoard($option);
$content = array('chat_id' => $chat_id, 'text' => "Управление светом:", 'reply_markup' => $keyb, 'parse_mode' => 'HTML');
$this->sendContent($content);
Событие:

Код: Выделить всё

$off = json_decode('"'.'\ud83c\udf11'.'"');
$on = json_decode('"'.'\uD83C\uDF15'.'"');
$ss = $off;
$gs = $off;
$ds = $off;
$ps = $off;
$ks = $off;
$shs = $off;
$kls = $off;
$sw = false;

if (gg("Relay02.status") == 1) {$ss = $on;} //Спальня
if (gg("Relay01.status") == 1) {$gs = $on;} //Гостиная
if (gg("Relay04.status") == 1) {$ds = $on;} //Детская
if (gg("Relay06.status") == 1) {$ps = $on;} //Прихожая
if (gg("Relay07.status") == 1) {$ks = $on;} //Коридор
if (gg("Relay05.status") == 1) {$shs = $on;} //Шкаф детская
if (gg("Relay03.status") == 1) {$kls = $on;} //Кладовка

// Спальня
if ($callback == 'Callback_Relay02') {
    $sw = true;
    if (gg("Relay02.status") == 1) { $ss = $off; }
    else { $ss = $on; }
    cm("Relay02.switch");
}

// Гостиная
if ($callback == 'Callback_Relay01') {
    $sw = true;
    if (gg("Relay01.status") == 1) { $gs = $off; }
    else { $gs = $on; }
    cm("Relay01.switch");
}

// Детская
if ($callback == 'Callback_Relay04') {
    $sw = true;
    if (gg("Relay04.status") == 1) { $ds = $off; }
    else { $ds = $on; }
    cm("Relay04.switch");
}
// Прихожая
if ($callback == 'Callback_Relay06') {
    $sw = true;
    if (gg("Relay06.status") == 1) { $ps = $off; }
    else { $ps = $on; }
    cm("Relay06.switch");
}
// Коридор
if ($callback == 'Callback_Relay07') {
    $sw = true;
    if (gg("Relay07.status") == 1) { $ks = $off; }
    else { $ks = $on; }
    cm("Relay07.switch");
}
// Шкаф детская
if ($callback == 'Callback_Relay05') {
    $sw = true;
    if (gg("Relay05.status") == 1) { $shs = $off; }
    else { $shs = $on; }
    cm("Relay05.switch");
}
// Кладовка
if ($callback == 'Callback_Relay03') {
    $sw = true;
    if (gg("Relay03.status") == 1) { $kls = $off; }
    else { $kls = $on; }
    cm("Relay03.switch");
}
if ($sw) {
$option = array(array($this->buildInlineKeyboardButton($text=$ss."Спальня","","Callback_Relay02",""),
                        $this->buildInlineKeyboardButton($text=$gs."Гостиная","","Callback_Relay01",""),
                        $this->buildInlineKeyboardButton($text=$ds."Детская","","Callback_Relay04","")),
                  array($this->buildInlineKeyboardButton($text=$ps."Прихожая","","Callback_Relay06",""),
                        $this->buildInlineKeyboardButton($text=$ks."Коридор","","Callback_Relay07",""),
                        $this->buildInlineKeyboardButton($text=$shs."Шкаф детская","","Callback_Relay05","")),
                  array($this->buildInlineKeyboardButton($text=$kls."Кладовка","","Callback_Relay03","")
                     ));
$keyb = $this->buildInlineKeyBoard($option);
$this->editMessage($chat_id,$message_id,"Управление светом:",$keyb);
}
Также можно сделать разбиение по количеству кнопок на строку с помощью одного массива и команды array_chunk:

Код: Выделить всё

$option = array($this->buildInlineKeyboardButton($text=$ss."Спальня","","Callback_Relay02",""),
                      $this->buildInlineKeyboardButton($text=$gs."Гостиная","","Callback_Relay01",""),
                      $this->buildInlineKeyboardButton($text=$ds."Детская","","Callback_Relay04",""),
                      $this->buildInlineKeyboardButton($text=$ps."Прихожая","","Callback_Relay06",""),
                      $this->buildInlineKeyboardButton($text=$ks."Коридор","","Callback_Relay07",""),
                      $this->buildInlineKeyboardButton($text=$shs."Шкаф детская","","Callback_Relay05",""),
                      $this->buildInlineKeyboardButton($text=$kls."Кладовка","","Callback_Relay03","")
                     );
$count_row = 3;
$option = array_chunk($option, $count_row);
Скриншот:
СпойлерПоказать
Screenshot_20191029-141851.jpg
Screenshot_20191029-141851.jpg (324.65 КБ) 1088 просмотров
Может кому-нибудь будет полезно :)
За это сообщение автора Plug поблагодарил:
viktor6 (Вт окт 29, 2019 3:40 pm)
Рейтинг: 1.23%
Doozer
Сообщения: 15
Зарегистрирован: Ср окт 30, 2019 9:47 am
Благодарил (а): 0
Поблагодарили: 0

Re: [Модуль] Telegram (telegram)

Сообщение Doozer » Ср окт 30, 2019 9:55 am

Добрый день!

Нужна консультация знающих людей.
Вчера создал бота. При настройке в majordomo так и не смог автоматически получить добавления пользователя, хотя в телеге на команду /start ответ о регистрации приходил. В логах модуля MD нашел присылаемые сообщения от незарегистрированного пользователя (от себя), скопировал ID и добавил пользователя вручную, все права пользователю отдал. Установил локальный прокси.
Системные сообщения от MD теперь в чат приходят без проблем. Но при попытке общения с ботом и отправке "ping" в ответ приходит список команд для управления ботом, но не приходит ответ от MD.
В чем может быть проблема?
Аватара пользователя
Eraser
Сообщения: 963
Зарегистрирован: Вт окт 21, 2014 7:31 pm
Откуда: Киров
Благодарил (а): 13 раз
Поблагодарили: 721 раз
Контактная информация:

Re: [Модуль] Telegram (telegram)

Сообщение Eraser » Ср окт 30, 2019 9:59 am

Doozer писал(а):
Ср окт 30, 2019 9:55 am
Добрый день!

Нужна консультация знающих людей.
Вчера создал бота. При настройке в majordomo так и не смог автоматически получить добавления пользователя, хотя в телеге на команду /start ответ о регистрации приходил. В логах модуля MD нашел присылаемые сообщения от незарегистрированного пользователя (от себя), скопировал ID и добавил пользователя вручную, все права пользователю отдал. Установил локальный прокси.
Системные сообщения от MD теперь в чат приходят без проблем. Но при попытке общения с ботом и отправке "ping" в ответ приходит список команд для управления ботом, но не приходит ответ от MD.
В чем может быть проблема?
цикл телеграм работает? что в логе?
Connect ---- Telegram
Яндекс.Деньги для благодарностей за помощь: 410012076838296 или нажмите кнопку "Спасибо"!!! :D
Doozer
Сообщения: 15
Зарегистрирован: Ср окт 30, 2019 9:47 am
Благодарил (а): 0
Поблагодарили: 0

Re: [Модуль] Telegram (telegram)

Сообщение Doozer » Ср окт 30, 2019 10:35 am

Цикл работает - отсчет времени и системные сообщения Алиса шлет в чат исправно. До логов смогу добраться только вечером. Посмотрю отпишусь. Если сам не разберусь ))
gagarin74
Сообщения: 321
Зарегистрирован: Пн апр 06, 2015 9:51 am
Благодарил (а): 35 раз
Поблагодарили: 21 раз

Re: [Модуль] Telegram (telegram)

Сообщение gagarin74 » Ср окт 30, 2019 11:53 am

Добрый день. Два вопроса. Один прямой ,другой косвенный.
1 В данный момент у кого правильно работает бот @Ru_Tracker_Bot полное его описание https://trashbox.ru/link/how-to-rutracker-telegram
все работало как часы. Теперь поиск трекеров работает но вот ссылку на магнит -шлет какую то хрень. (вопрос в принципе не связан с умным домом ни как)

2 Как сделать в телеграмме кнопки подкнопку типо меню и подменю.
Cools2
Сообщения: 22
Зарегистрирован: Вт окт 16, 2018 3:42 pm
Благодарил (а): 4 раза
Поблагодарили: 3 раза

Re: [Модуль] Telegram (telegram)

Сообщение Cools2 » Ср окт 30, 2019 3:29 pm

Если я внутри модуля телеграм хочу отправить картинку тому кто запросил, достаточно будет написать $this->sendImageToUser($chat_id, $img); ?

$img = '/cms/images/'.gg('Camera01.snapshot');
Ответить