QQ Хабр! В этом гайде мы пройдемся по каждому шагу создания ботов в Telegram — от регистрации бота до публикации репозитория на GitHub. Некоторым может показаться, что все разжевано и слишком много элементарной информации, но этот гайд создан для новичков, хотя будет интересен и для тех, кто уже занимался разработкой в Telegram. Сегодня мы будем делать бота, который отвечает на заданные вопросы.
I. Регистрация бота
На этом процесс регистрации бота завершен, можно приступать к самому интересному — кодингу
II. Кодинг
Итак, бота мы будем писать на python. Для начала установим библиотеку pytelegrambotapi. Для этого в командной строке (или в терминале, если у вас MacOS) пишем:
pip3 install pytelegrambotapi
После этого можно приступать, импортируем библиотеки и вводим токен:
import telebot bot = telebot.TeleBot(‘BOT-TOKEN’)
Вместо BOT-TOKEN пишем токен, который получили от BotFather
Как ИДЕАЛЬНО писать БОТОВ на PYTHON | Aiogram & Nextcord
Сейчас можно уже и поговорить о кнопках
Кнопки
Для того, чтобы кнопки заработали нужно импортировать типы, для этого после импорта библиотек пишем:
from telebot import types
Бывает два вида кнопок, это:
- Inline-кнопки
- Keyboard-кнопки
Inline-кнопки
Для создания таких кнопок используется метод InlineKeyboardMarkup, например, сделаем кнопку, которая ведет на сайт Хабра
Выглядит это так
Более подробно про такие кнопки можно почитать в этой статье
Keyboard-кнопки
Такие кнопки можно увидеть в большом количестве ботов, таких как Дайвинчик и тому подобные. Пишутся они довольно просто, с помощью метода ReplyKeyboardMarkup. Для примера сделаем кнопку выбора языка
Источник: temofeev.ru
Взаимодействие с ботом Telegram с помощью Arduino
Мессенджер Telegram является крайне популярным в современном мире, с ним могут взаимодействовать множество сторонних приложений. В данной статье мы рассмотрим взаимодействие с ботом Telegram с помощью платы Arduino. Делать мы это будем с помощью библиотеки TelegramBot.h, позволяющей работать с ботами Telegram.
Также на нашем сайте вы можете посмотреть все проекты, в которых использовалось приложение Telegram. Посмотреть документацию (на английском языке) для работы с API Telegram можно по следующей ссылке.
Необходимые компоненты
Плата Arduino MKR1000 .
Вместо платы Arduino MKR1000 можно также использовать плату Arduino Zero с шилдом WiFi shield 101 или плату Arduino Uno (или Nano) с подключенным к ней WiFi модулем ESP8266, который будет управляться платой Arduino с помощью AT команд. Примеры подобного управления модулем ESP8266 можно посмотреть в следующих проектах:
- передача Email с использованием Arduino и WiFi модуля ESP8266;
- передача данных от Arduino Uno на веб-страницу с помощью WiFi;
- управление сервомотором по Wi-Fi с помощью Arduino и веб-браузера.
Лично на мой взгляд, данный проект дешевле и легче всего реализовать с помощью платы NodeMCU ESP8266, которую можно подключить к компьютеру по USB кабелю и запрограммировать с помощью Arduino IDE. Пример подобного проекта можно посмотреть по следующей ссылке. У него практически такой же код программы, как и код программы рассматриваемого в данной статье проекта.
Реализация проекта
Установка библиотеки для работы с ботом Telegram
Скачайте библиотеку TelegramBot Library по следующей ссылке.
Для ее установки в Arduino IDE откройте пункт меню Sketch / Include Library / Add .ZIP Library, после чего выберите скачанный вами .ZIP файл библиотеки.
Установка библиотек ArduinoJson и WiFi101
Библиотеки ArduinoJson и WiFi101 можно установить с помощью менеджера библиотек (Library Manager) Arduino IDE как показано на следующих рисунках.
Примечание : данный пункт необходим при использовании платы Arduino MKR1000 или платы Arduino Zero с шилдом WiFi shield 101. При использовании платы Arduino Uno (или Nano) с подключенным к ней WiFi модулем ESP8266 библиотеку WiFi101 можно не устанавливать.
Установка бота Botfather
Botfather – это бот, который позволяет вам создавать своих собственных ботов для приложения Telegram. Для создания нового бота с его помощью используйте команду /newbot.
После этого введите имя данного бота (name), затем имя пользователя (username).
Далее сгенерируйте токен авторизации (authorization token) для вашего нового бота. Также процесс создания нового бота в Telegram с помощью Botfather описан в этой статье.
После создания бота имя вашего бота будет показываться в контактах и некоторых других местах приложения Telegram.
Имя пользователя (Username) для созданного вами бота – это имя, которое будет использоваться в заметках и ссылках telegram.me. Имя пользователя вашего бота должно оканчиваться на ‘bot’, то есть, к примеру, допустимы имена ‘tetris_bot’ или ‘TetrisBot’.
Если ваш бот включен в какую либо группу, то он по умолчанию будет работать в приватном режиме (privacy mode). Это означает, что он будет принимать только команды, которые начинаются с «/». Чтобы отключить приватный режим вам в необходимо в чате с вашим ботом написать следующий набор команд:
Bot setting
Group privacy
Также вы можете создать свой собственный набор команд для бота используя команду /setcommands в чате с BotFather. Этот список появится только при работе с мобильного устройства при нажатии на иконку «/».
Исходный код программы (скетча)
С помощью представленной программы мы будем включать и выключать светодиод, передавая для этого из приложения Telegram сообщения “On” или “Off”.
// данные для подключения к сети Wifi
char ssid [ ] = «xxxx» ; // your network SSID (name)
char pass [ ] = «yyyy» ; // your network key
// Initialize Telegram BOT
const char * BotToken = «xxxx» ; // токен авторизации вашего бота
WiFiSSLClient client ;
TelegramBot bot ( BotToken , client ) ;
const int ledPin = 6 ; // контакт, к которому подключен светодиод
void setup ( )
Serial . begin ( 115200 ) ;
while ( ! Serial ) < >//Start running when the serial is open
delay ( 3000 ) ;
// делаем попытку соединения с сетью Wifi:
Serial . print ( «Connecting Wifi: » ) ;
Serial . println ( ssid ) ;
while ( WiFi . begin ( ssid , pass ) != WL_CONNECTED )
Serial . print ( «.» ) ;
delay ( 500 ) ;
Serial . println ( «» ) ;
Serial . println ( «WiFi connected» ) ;
bot . begin ( ) ;
pinMode ( ledPin , OUTPUT ) ;
message m = bot . getUpdates ( ) ; // считываем новые сообщения
if ( m . text . equals ( «On» ) )
digitalWrite ( ledPin , HIGH ) ;
Serial . println ( «message received» ) ;
bot . sendMessage ( m . chat_id , «The Led is now ON» ) ;
else if ( m . text . equals ( «Off» ) )
digitalWrite ( ledPin , LOW ) ;
Serial . println ( «message received» ) ;
bot . sendMessage ( m . chat_id , «The Led is now OFF» ) ;
Видео, демонстрирующее работу проекта
Похожие статьи
(Проголосуй первым!)
4 027 просмотров
Рубрика: Схемы на Arduino Метки: arduino, Telegram, мессенджер Постоянная ссылка
Комментарии
Взаимодействие с ботом Telegram с помощью Arduino — 12 комментариев
Михаил говорит 02.03.2023 в 11:44 :
NodeMCU ESP8266 по количеству контактов по сути Arduino UNO. Но есть ещё один ньюанс, у ESP8266 питание, а соответсвенно и входы-выходы работают не с 5В, а с 3,3В, что не позволяет испольовать со стандартными реле расчитанными на 5В. Ну и количество входов-выходов Aruino MEGA не сравнить ти с Arduino UNO, ни с NodeMCU ESP8266.
admin-new говорит 02.03.2023 в 16:53 :
Ну если у вас проект требует так много входов/выходов, то да, Aruino MEGA здесь по этому параметру почти вне конкуренции. Ну тут уж сами решайте что вам удобнее, либо управлять с ее помощью модулем ESP8266 с помощью AT команд, либо использовать какую-нибудь плату Aruino со встроенным WiFi если не хотите смотреть в сторону других плат (Raspberry Pi Pico W и т.д.)
Михаил говорит 26.02.2023 в 17:24 :
По сути та же Arduino UNO,только всего один аналоговый вход вместо 6. А мне приходится использовать Arduino MEGA.
admin-new говорит 26.02.2023 в 17:46 :
Ну количество доступных контактов можно увеличить с помощью регистров сдвига или другими способами. Какой то у вас больно сложный проект если вам такое большое количество контактов необходимо. Просто если модуль ESP8266 к плате Ардуино подключать чтобы его использовать только в качестве WiFi модуля, то управлять им придется с помощью АТ команд.
Может быть, вы тогда какую-нибудь современную плату Ардуино для своего проекта присмотрели бы, со встроенным WiFi. К примеру, у нас на сайте есть подробный обзор различных плат Ардуино.
Или вы можете посмотреть в сторону более производительных плат, Raspberry Pi Pico W (есть WiFi) или плат на основе STM32.
Михаил говорит 23.02.2023 в 10:52 :
С Днём защитника Отечества!
Вы пишете: «При использовании платы Arduino Uno (или Nano) с подключенным к ней WiFi модулем ESP8266 библиотеку WiFi101 можно не устанавливать.»
Подскажите, пожалуйста, я использую плату Arduino MEGA + ESP-01, какие дополнительные библиотеки нужно использовать или каким методом передать какой Serial порт используется (у Вас, кстати, этого в программе нет). Меня весьма заинтересовал Ваш вариант, хотелось бы доработать свой проект под возможность передачи данных в Телеграм, а посему с нетерпением буду ожидать Вашего ответа.
Заранее благодарен, Михаил
admin-new говорит 23.02.2023 в 11:35 :
Добрый день. И вас с Днем защитника отечества. Вам понадобится только библиотека TelegramBot.h, библиотека для соединения с сетью WiFi будет не нужна потому что с сетью WiFi вы будете соединяться с помощью модуля ESP-01, а управлять им вы будете с помощью AT команд. Примеры управления модулем ESP-01 с помощью AT команд можно посмотреть, к примеру, в следующих статьях:
https://microkontroller.ru/arduino-projects/upravlenie-servomotorom-po-wi-fi-s-pomoshhyu-arduino-i-veb-brauzera/
https://microkontroller.ru/arduino-projects/peredacha-email-s-ispolzovaniem-arduino-i-wifi-modulya/
Serial порт вы можете использовать стандартный для вашей платы, либо с помощью библиотеки SoftwareSerial (в этом случае ее также необходимо установить) сконфигурировать любые два цифровых контакта платы для работы в качестве последовательного порта — именно этот вариант и использован в двух приведенных примерах статей
Михаил говорит 23.02.2023 в 17:47 :
На TelegramBot.h матерится не по детски. “ПРЕДУПРЕЖДЕНИЕ: библиотека TelegramBot-Library-master должна запускаться на архитектурах samd, esp8266 и может быть несовместима с вашей платой на архитектуре avr.”
Посмотрел Ваши предложения по использованию АТ команд. Даже несколько странно: писать на языке высокого уровня и возвращаться к Assembler для передачи нескольких слов в мессенджер. По факту я использую библиотеку RemoteXY.h для двухсторонней связи со смартфоном и управления всем проектом. Попытка прикрутить телеграм вызвало вышеуказанное предупреждение и недоумение по поводу строки
WiFiSSLClient client;
Что естественно, так как я отказался от библиотеки WiFi101, но в следующей строке
TelegramBot bot(BotToken,client);
Я передаю библиотеке TelegramBot.h некоего клиента и чем его заменить — сугубо непонятно, честно говоря в библиотеке пока не разобрался, что за клиент и что он делает.
admin-new говорит 24.02.2023 в 12:48 :
По поводу использования АТ команд и возвращения, так сказать, к ассемблеру — это плата за то, что в обычных платах Arduino нет WiFi модуля. Мне тоже не очень нравятся АТ команды.
Поэтому подобный проект я бы делал на Arduino с поддержкой WiFi, или на модуле NodeMCU ESP8266 или ESP32 — эти модули имеют поддержку WiFi и программируются точно также как Arduino, а стоят дешевле
Михаил говорит 24.02.2023 в 18:35 :
Не хватает входов-выходов на ESP8266.
admin-new говорит 24.02.2023 в 21:15 :
У ESP-01 действительно очень мало контактов, но модули ESP8266 выпускаются в различных модификациях с различным числом входов/выходов. Неужели даже их количества в NodeMCU ESP8266 вам не хватает?
Источник: microkontroller.ru
Telegram-бот без сторонних библиотек
Практически все примеры в гугле которые я встречал разбираясь с API телеграмма, работают с какой-то библиотекой. Для совсем простых задач они вовсе не обязательны.
После статьи про бота в вк у меня спрашивали так же про ботов в телеграмме. Расскажу про максимально простой пример создания ботов в телеграмме. Даже не то что создания ботов, а скорее того, как именно работать с апи телеграмма в целом. Делать мы будем абсолютно то же самое, что и в той статье про каллбек апи от вк.
Сделаем то же самое — ответ на сообщения просто задом-наперёд.
Для начала нужно создать бота. Чтобы сделать это, нужно написать отцу ботов в телеграмме команду /newbot
После чего он спросит имя бота и его логин, который обязательно должен кончаться на bot.
Например: evilbot, coder_bot, samplebot и т.д.
Следом вы получите ссылку на своего бота и токен. Боту можете написать даже сейчас, но он ничего Вам не ответит.
Непорядок! Давайте исправим это.
Нам нужно создать файлы webhook.php и tg.class.php.
Ниже будут приведён полный код этих файлов с комментариями
$body = file_get_contents(‘php://input’); //Получаем в $body json строку $arr = json_decode($body, true); //Разбираем json запрос на массив в переменную $arr function cir_strrev($stroka) < //Так как функция strrev не умеет нормально переворачивать кириллицу, нужен костыль через массив. Создадим функцию preg_match_all(‘/./us’, $stroka, $array); return implode(»,array_reverse($array[0])); >include_once (‘tg.class.php’); //Меж дела подключаем наш tg.class.php //Сразу и создадим этот класс, который будет написан чуть позже //Сюда пишем токен, который нам выдал бот $tg = new tg(‘000000000:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA’); $sms = $arr[‘message’][‘text’]; //Получаем текст сообщения, которое нам пришло. //О структуре этого массива который прилетел нам от телеграмма можно узнать из официальной документации. //Сразу и id получим, которому нужно отправлять всё это назад $tg_id = $arr[‘message’][‘chat’][‘id’]; //Перевернём строку задом-наперёд используя функцию cir_strrev $sms_rev = cir_strrev($sms); //Используем наш ещё не написанный класс, для отправки сообщения в ответ $tg->send($tg_id, $sms_rev); exit(‘ok’); //Обязательно возвращаем «ok», чтобы телеграмм не подумал, что запрос не дошёл
tg.class.php:
token = $token; //Забиваем в переменную токен при конструкте класса > public function send($id, $message) < //Задаём публичную функцию send для отправки сообщений //Заполняем массив $data инфой, которую мы через api отправим до телеграмма $data = array( ‘chat_id’ =>$id, ‘text’ => $message, ); //Получаем ответ через функцию отправки до апи, которую создадим ниже $out = $this->request(‘sendMessage’, $data); //И пусть функция вернёт ответ. Правда в данном примере мы это никак не будем использовать, пусть будет задаток на будущее return $out; > public function request($method, $data = array()) < $curl = curl_init(); //мутим курл-мурл в переменную. Для отправки предпочтительнее использовать курл, но можно и через file_get_contents если сервер не поддерживает curl_setopt($curl, CURLOPT_URL, ‘https://api.telegram.org/bot’ . $this->token . ‘/’ . $method); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_CUSTOMREQUEST, ‘POST’); //Отправляем через POST curl_setopt($curl, CURLOPT_POST, true); curl_setopt($curl, CURLOPT_POSTFIELDS, $data); //Сами данные отправляемые $out = json_decode(curl_exec($curl), true); //Получаем результат выполнения, который сразу расшифровываем из JSON’a в массив для удобства curl_close($curl); //Закрываем курл return $out; //Отправляем ответ в виде массива > >
Всё! Всё что осталось — это указать в настройках бота ссылку на наш webhook.php, на который будут приходить уведомления от телеграмма. Для этого нужно перейти по ссылке:
Источник: evilcoder.ru