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

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

Модератор: immortal

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

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

Сообщение vitosmaxim80sad145 » Пн мар 28, 2022 11:52 pm

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

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

Сообщение sandrey » Сб апр 02, 2022 11:34 pm

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

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

Сообщение pasha413 » Пт май 27, 2022 8:07 pm

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 камер
  • Возможность испытать удачу (мини игра, подбрасывает кубик)
  • Интерактивная клавиатура
Как выглядит меню:
Фотографии менюПоказать
МенюПоказать
Изображение
ПогодаПоказать
Список погодыПоказать
Изображение
На сегодняПоказать
Изображение
На завтраПоказать
Изображение
На послезавтраПоказать
Изображение
УправлениеПоказать
Изображение
ДругоеПоказать
Список функцийПоказать
Изображение
Активность в туалетеПоказать
Изображение
График температурыПоказать
Изображение
Курс валютПоказать
Изображение
РадиоПоказать
Управление радиостанциямиПоказать
Изображение
Управление звукомПоказать
Изображение
Статус устройствПоказать
Изображение
КамерыПоказать
Изображение
Фаза луныПоказать
Изображение
СценарииПоказать
Выбор сценарияПоказать
ИгрыПоказать
1Показать
Изображение
Изображение
Изображение
2Показать
Изображение
Изображение
Изображение
3Показать
Изображение
Изображение
Изображение
4Показать
Изображение
Изображение
Изображение
ЦитатыПоказать
Изображение
Изображение
ПользовательскиеПоказать
Изображение
НовостиПоказать
Изображение
Изображение
Изображение
Как сделать также:
ТуториалПоказать
Функции ботаПоказать
  1. Скачиваем архив
    ФайлПоказать
    TeleramMenu.zip
  2. Импортируем в события файлы .txt
    Панель импорта событийПоказать
    Изображение
  3. Включаем галочки у всех событий (если у чего-нибудь выключены).
  4. Добавляем команду "Меню" с пустым содержанием.
    Команда "Меню"Показать
    Изображение
RSS каналПоказать
  1. Создаём группу(или канал) в telegram'е.
    Создание группы в teleram'еПоказать
    Изображение
  2. Добавляем туда нашего бота.
    Добавление ботаПоказать
    Изображение
  3. Пишем команду /start.
  4. В настройках бота добавляем группе права администратора.
    Добавление прав администратораПоказать
    Изображение
    Изображение
  5. Импортируем в сценарии файл.json
    Панель импорта сценариевПоказать
    Изображение
  6. В сценарии изменяем id на тот, что у вашего канала.
    Изменение idПоказать
    Изображение
Готово!
Чтобы запустить меню, напишите "Меню".
P.SПоказать
P.S Все настройки меню легко можно изменять под себя, т.к. каждая функция лежит в отдельном ивенте.
P.S.S Это новая версия с переделанной структурой для более лёгкой настройки кода.
Что планируется сделать:
ПланыПоказать
  • Возможность получения и просмотра информации о луне. (Готово)
  • Возможность запустить любой сценарий. (Готово)
  • Возможность просматривать устройства 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
Сообщения: 1877
Зарегистрирован: Пт апр 07, 2017 12:20 pm
Благодарил (а): 303 раза
Поблагодарили: 402 раза

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

Сообщение Logrus » Сб май 28, 2022 9:32 am

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

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

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']);
}
За это сообщение автора Logrus поблагодарил:
pasha413 (Сб май 28, 2022 10:07 am)
Рейтинг: 1.18%
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
Aleksandr_A
Сообщения: 30
Зарегистрирован: Ср окт 09, 2019 9:24 am
Благодарил (а): 4 раза
Поблагодарили: 5 раз

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

Сообщение Aleksandr_A » Вс май 29, 2022 7:53 pm

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

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

Сообщение Logrus » Вс май 29, 2022 7:56 pm

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

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

Сообщение Aleksandr_A » Вс май 29, 2022 8:08 pm

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

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

Сообщение 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 можно изменить сообщение с изображением, но не совсем пойму как его использовать в модуле.
наверное добавить его поддержку как едитмессаджтекст
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7, флешка 16 Гб работает с 10.09.2017
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
Aleksandr_A
Сообщения: 30
Зарегистрирован: Ср окт 09, 2019 9:24 am
Благодарил (а): 4 раза
Поблагодарили: 5 раз

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

Сообщение Aleksandr_A » Вс май 29, 2022 8:13 pm

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
Сообщения: 1877
Зарегистрирован: Пт апр 07, 2017 12:20 pm
Благодарил (а): 303 раза
Поблагодарили: 402 раза

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

Сообщение Logrus » Вс май 29, 2022 8:18 pm

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