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

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

Модератор: immortal

Аватара пользователя
vitosmaxim80sad145
Сообщения: 148
Зарегистрирован: Сб июл 07, 2018 12:48 am
Откуда: Днепр

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

Сообщение vitosmaxim80sad145 »

Здраствуйте подскажите как сделать чтобы приходя в магазин , приходил список покупок и в нём отмечать уже купленные товары, такая возможность в самом модуле есть ,но как сделать команду в телегу я не знаю
sandrey
Сообщения: 9
Зарегистрирован: Вт фев 18, 2020 10:08 pm

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

Сообщение sandrey »

Добрый день уважаемые знатоки. Есть необходимость получать и анализировать сообщения с телеграм канала.
Добавляю ID канала в список пользователей, иконка и описание подгружается, но сообщения не получаю. Подозреваю надо подписаться на канал. Прошу помощи как решить данный вопрос.
pasha413
Сообщения: 131
Зарегистрирован: Сб янв 13, 2018 6:28 pm

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

Сообщение pasha413 »

RomanAndr писал(а): Чт фев 10, 2022 12:39 am
pasha413 писал(а): Ср дек 22, 2021 3:30 pm
RomanAndr писал(а): Пн мар 01, 2021 4:52 pm Всем привет, хочу поделится моим вариантом меню.
Меню включает в себя:
  • Получение погоды (модуль openwethermap)
  • Получение графика температуры (любое свойство с историей (модуль Charts))
  • Курс валют (получение / обновление курсов валют (модуль ExchangeRates))
  • Управление online radio (включение / выключение радиостанций, управление громкостью проигрывания (модуль Online Radio))
  • Возможность просмотра и обновление информации о луне. (MoonPhase)
  • Получение случаенных цитат (Quotes)
  • Получение новостей с RSS каналов(RSS Channels)
  • Возможность просматривать статус хостов. (модуль Устройства Online)
  • Управление освещением (включение различных методов объектов (turnOn, turnOff, switch))
  • Возможность запустить любой сценарий (список берётся из ваших сценариев).
  • Просмотр состояний светильников (объектов со свойством status)
  • Получение свойств любого объекта
  • Получение изображений с ip камер
  • Возможность испытать удачу (мини игра, подбрасывает кубик)
  • Интерактивная клавиатура
Как выглядит меню:
Фотографии менюSPOILER_SHOW
МенюSPOILER_SHOW
Изображение
ПогодаSPOILER_SHOW
Список погодыSPOILER_SHOW
Изображение
На сегодняSPOILER_SHOW
Изображение
На завтраSPOILER_SHOW
Изображение
На послезавтраSPOILER_SHOW
Изображение
УправлениеSPOILER_SHOW
Изображение
ДругоеSPOILER_SHOW
Список функцийSPOILER_SHOW
Изображение
Активность в туалетеSPOILER_SHOW
Изображение
График температурыSPOILER_SHOW
Изображение
Курс валютSPOILER_SHOW
Изображение
РадиоSPOILER_SHOW
Управление радиостанциямиSPOILER_SHOW
Изображение
Управление звукомSPOILER_SHOW
Изображение
Статус устройствSPOILER_SHOW
Изображение
КамерыSPOILER_SHOW
Изображение
Фаза луныSPOILER_SHOW
Изображение
СценарииSPOILER_SHOW
Выбор сценарияSPOILER_SHOW
ИгрыSPOILER_SHOW
1SPOILER_SHOW
Изображение
Изображение
Изображение
2SPOILER_SHOW
Изображение
Изображение
Изображение
3SPOILER_SHOW
Изображение
Изображение
Изображение
4SPOILER_SHOW
Изображение
Изображение
Изображение
ЦитатыSPOILER_SHOW
Изображение
Изображение
ПользовательскиеSPOILER_SHOW
Изображение
НовостиSPOILER_SHOW
Изображение
Изображение
Изображение
Как сделать также:
ТуториалSPOILER_SHOW
Функции ботаSPOILER_SHOW
  1. Скачиваем архив
    ФайлSPOILER_SHOW
    TeleramMenu.zip
  2. Импортируем в события файлы .txt
    Панель импорта событийSPOILER_SHOW
    Изображение
  3. Включаем галочки у всех событий (если у чего-нибудь выключены).
  4. Добавляем команду "Меню" с пустым содержанием.
    Команда "Меню"SPOILER_SHOW
    Изображение
RSS каналSPOILER_SHOW
  1. Создаём группу(или канал) в telegram'е.
    Создание группы в teleram'еSPOILER_SHOW
    Изображение
  2. Добавляем туда нашего бота.
    Добавление ботаSPOILER_SHOW
    Изображение
  3. Пишем команду /start.
  4. В настройках бота добавляем группе права администратора.
    Добавление прав администратораSPOILER_SHOW
    Изображение
    Изображение
  5. Импортируем в сценарии файл.json
    Панель импорта сценариевSPOILER_SHOW
    Изображение
  6. В сценарии изменяем id на тот, что у вашего канала.
    Изменение idSPOILER_SHOW
    Изображение
Готово!
Чтобы запустить меню, напишите "Меню".
P.SSPOILER_SHOW
P.S Все настройки меню легко можно изменять под себя, т.к. каждая функция лежит в отдельном ивенте.
P.S.S Это новая версия с переделанной структурой для более лёгкой настройки кода.
Что планируется сделать:
ПланыSPOILER_SHOW
  • Возможность получения и просмотра информации о луне. (Готово)
  • Возможность запустить любой сценарий. (Готово)
  • Возможность просматривать устройства online. (Готово)
  • Получение случаенных цицат. (Готово)
  • Получение новостей из RSS каналов. (Готово)
  • Добавить другие игры с использованием других смайликов с рандомом (игровой автомат, баскетбол, дротик). (Готово)
  • Сделать управление простыми устройствами.
  • Возможность простого добавления собственных команд с аргументами.
  • Получение любого графика из модуля Charts.
  • И что-нибудь ещё.. ( :idea: предлагайте идеи :idea: )
Спасибо, хорошая менюшка, но есть вопрос:
не получилось автоматически удалять сообщения, например сообщение ввода команды "назад"
вот например так https://disk.yandex.ru/i/DfZggjGA4pD93g - видосик как работает у меня автоудаление. могу скинуть код.
Спасибо! Как я понял сообщения удаляются через некоторый интервал после отправки, можете отправить код, в моём случае я бы сделал так, что при отправке нового сообщения боту, его предыдущее и моё отправленное удаляется, типо будет только одно активное сообщение для чистоты чата.
Здравствуйте. извините, давно не заходил, не видел сообщение.
допустим код команды с удалением предыдущео сообщения и самой команды (как в начале видео)

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

$sm1 = json_decode('"'.'\ud83c\udf11'.'"');
$climate="Баня:".hex2bin('f09f8ca1').gg('TempHum_Banya.value')."°C, ".hex2bin('F09F92A6').gg('TempHum_Banya.valueHumidity')."%,".hex2bin('F09F948B').gg('BattTemp_Banya.value')."%;";
$climate.="\r\nУлица:".hex2bin('f09f8ca1').gg('TempHum_Ulica.value')."°C, ".hex2bin('F09F92A6').gg('TempHum_Ulica.valueHumidity')."%,".hex2bin('F09F948B').gg('BattTemp_Ulica.value')."%;";
$climate.="\r\nТеплица:".hex2bin('f09f8ca1').gg('TempHum_Teplica.value')."°C, ".hex2bin('F09F92A6').gg('TempHum_Teplica.valueHumidity')."%,".hex2bin('F09F948B').gg('BattTemp_Teplica.value')."%;";
$climate.="\r\nАтмосферное давление:".hex2bin('F09F92AA').gg('Press_Ulica.value')."мм.рт.ст;";
//return $climate;

$this->sendAction($chat_id,"typing");
//$this->sendMessageToUser($chat_id,$climate); // заменяем на код с автоудалением предыдущих сообщений
$res = $this->sendMessageToUser($chat_id, $climate);
if ($message_id = $res['result']['message_id']) { //ид ответа на команду 
 $message_id_old = registeredEventDetails('tlg/command/climate'); //ид предыдущего ответа на команду (по аналогии меняем climate и копируем на остальные команды)
 $this->deleteMessage($chat_id, $message_id_old); //удаляем предыдущий ответ
 registerEvent('tlg/command/climate', $message_id, 1); //регистрируем ид текущего ответа (см. выше)
 $this->deleteMessage($chat_id, $data['message']['message_id']); //удаляем команду Климат
}
а вот код с автоудалением через определенное время команды и сообщения

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

include_once(DIR_MODULES . 'telegram/telegram.class.php');
$telegram_module = new telegram();
//формируем массив названий кнопок, далее нужное по аналогии добавить здесь
$scripts = array('restart cycles',
                 'reboot system',
                 'reboot router',
                 'shutDown');

$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);

$res = $telegram_module->sendContent($content);
$message_id = $res["result"]["message_id"];
echo '<pre>';
print_r($res);
echo '</pre>';
sleep(5); // через 5 секунд удаляем сообщение и команду
$res = $telegram_module->deleteMessage($chat_id, $message_id);
$this->deleteMessage($chat_id, $data['message']['message_id']);
echo '<pre>';
print_r($res);
echo '</pre>';
и событие CallbackScripts_ на команду:

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

//у всех каллбеков, т.к. они вызываются все определяем условие по которому сработает нужный
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;

   break;
  case '4':

   break;
  default:

 }
 //формируем всплывающее сообщение с названием скрипта
 $this->sendAnswerCallbackQuery($callback_id, $script, false);
 //выполняем заданный скрипт
 runScriptSafe($script);
}
если удастся внедрить автоудаление предыдущих сообщений, было бы очень круто!
все вышеизложенное взято в том числе и здесь:
https://connect.smartliving.ru/profile/ ... gramm.html
Моё: Orange Pi Zero H2 + DietPi / Paspberry Pi3b + MJD 3.41
Logrus
Сообщения: 2113
Зарегистрирован: Пт апр 07, 2017 12:20 pm

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

Сообщение Logrus »

т.к. чат с ботом для каждого юзера уникальный
то так будет правильней, изначально не учел (в тлг курилке не раз подробно расписывалось)

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

if ($message_id = $res['result']['message_id']) {
 $message_id_old = registeredEventDetails('tlg/events/' . $chat_id);
 $this->deleteMessage($chat_id, $message_id_old);
 registerEvent('tlg/events/' . $chat_id, $message_id);
 $this->deleteMessage($chat_id, $data['message']['message_id']);
}
ну и не забывать про ограничение в тлг на удаление не старше 2 суток
в блоге был пример для скрипта его можно через таймер
(можно добавить к выше или отдельно)

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

setTimeout('preduprezhdeniya', "rs('tlg_deleteMessage',array('chat_id'=>$chat_id,'message_id'=>$message_id));",86400);
(сам скрипт tlg_deleteMessage)

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

if (isset($params['chat_id']) && isset($params['message_id'])) {
 include_once(DIR_MODULES . 'telegram/telegram.class.php');
 $telegram_module = new telegram();
 $telegram_module->deleteMessage($params['chat_id'], $params['message_id']);
}
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
Aleksandr_A
Сообщения: 33
Зарегистрирован: Ср окт 09, 2019 9:24 am

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

Сообщение Aleksandr_A »

Коллеги, а как можно отредактировать сообщение с картинкой (и инлайн клавиатурой)? Необходимо обновлять картинку по нажатию на кнопку.
Logrus
Сообщения: 2113
Зарегистрирован: Пт апр 07, 2017 12:20 pm

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

Сообщение Logrus »

Aleksandr_A писал(а): Вс май 29, 2022 7:53 pm Коллеги, а как можно отредактировать сообщение с картинкой (и инлайн клавиатурой)? Необходимо обновлять картинку по нажатию на кнопку.
картинку никак, через удаление и репостинг, хотя попробуй
текст можно и с клавиатурой editMessage
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
Aleksandr_A
Сообщения: 33
Зарегистрирован: Ср окт 09, 2019 9:24 am

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

Сообщение Aleksandr_A »

Logrus писал(а): Вс май 29, 2022 7:56 pm
Aleksandr_A писал(а): Вс май 29, 2022 7:53 pm Коллеги, а как можно отредактировать сообщение с картинкой (и инлайн клавиатурой)? Необходимо обновлять картинку по нажатию на кнопку.
картинку никак, через удаление и репостинг, хотя попробуй
текст можно и с клавиатурой editMessage
Судя по документации методом editMessageMedia можно изменить сообщение с изображением, но не совсем пойму как его использовать в модуле.
Logrus
Сообщения: 2113
Зарегистрирован: Пт апр 07, 2017 12:20 pm

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

Сообщение Logrus »

Aleksandr_A писал(а): Вс май 29, 2022 8:08 pm
Logrus писал(а): Вс май 29, 2022 7:56 pm
Aleksandr_A писал(а): Вс май 29, 2022 7:53 pm Коллеги, а как можно отредактировать сообщение с картинкой (и инлайн клавиатурой)? Необходимо обновлять картинку по нажатию на кнопку.
картинку никак, через удаление и репостинг, хотя попробуй
текст можно и с клавиатурой editMessage
Судя по документации методом editMessageMedia можно изменить сообщение с изображением, но не совсем пойму как его использовать в модуле.
наверное добавить его поддержку как едитмессаджтекст
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
Aleksandr_A
Сообщения: 33
Зарегистрирован: Ср окт 09, 2019 9:24 am

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

Сообщение Aleksandr_A »

Logrus писал(а): Вс май 29, 2022 8:10 pm
Aleksandr_A писал(а): Вс май 29, 2022 8:08 pm
Logrus писал(а): Вс май 29, 2022 7:56 pm
Aleksandr_A писал(а): Вс май 29, 2022 7:53 pm Коллеги, а как можно отредактировать сообщение с картинкой (и инлайн клавиатурой)? Необходимо обновлять картинку по нажатию на кнопку.
картинку никак, через удаление и репостинг, хотя попробуй
текст можно и с клавиатурой editMessage
Судя по документации методом editMessageMedia можно изменить сообщение с изображением, но не совсем пойму как его использовать в модуле.
наверное добавить его поддержку как едитмессаджтекст
Я вот думаю, а не получится это сделать через sendContent? Вроде там можно указывать метод?
Logrus
Сообщения: 2113
Зарегистрирован: Пт апр 07, 2017 12:20 pm

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

Сообщение Logrus »

попробуй )))
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
Ответить