Add lwB2
This commit is contained in:
parent
e257e6f66e
commit
18166fa852
@ -27,7 +27,7 @@
|
||||
* [Лабораторная работа №F1 - Одностраничное приложение (React)](/TODO/README.md)
|
||||
* [Лабораторная работа №F2 - Получение данных через API (Fetch)](/TODO/README.md)
|
||||
* [Лабораторная работа №B1 - Изучение шаблона проектирования MVC](/TODO/README.md)
|
||||
* [Лабораторная работа №B2 - Разработка чат-бота для Telegram](/TODO/README.md)
|
||||
* [Лабораторная работа №B2 - Разработка чат-бота для Telegram](/lwB2/README.md)
|
||||
|
||||
## Правила допуска до экзамена
|
||||
|
||||
|
86
lwB2/README.md
Normal file
86
lwB2/README.md
Normal file
@ -0,0 +1,86 @@
|
||||
# Лабораторная работа №B2 - Разработка чат-бота для Telegram
|
||||
|
||||
## Цель работы
|
||||
|
||||
Понять концепцию построения чат-ботов на примере Telegram.
|
||||
|
||||
## Ход работы
|
||||
|
||||
**Чат-бот** - программа, с которой можно общаться, будто вы общаетесь с живым (но может быть и не самым умным) собеседником.
|
||||
|
||||
Чат-боты служат для различных целей: в качестве напоминателей (всяческие календари), подсказчиков ("не забудь заплатить за электричество!1"), информационных служб (например, "пробить авто по номеру" или "показать погоду в Ульяновске") и много чего ещё.
|
||||
|
||||
Обычно чат-бот не умеет сам писать сообщения людям, только реагировать на сообщения от людей.
|
||||
Однако иногда допускается писать самостоятельно, если диалог с пользователем уже был когда-то инициирован.
|
||||
|
||||
Существует множество архитектур по созданию чат-ботов для разных платформ.
|
||||
Мы же рассмотрим Telegram.
|
||||
|
||||
Для создания нового бота необходимо... написать боту `@BotFather`!
|
||||
Он на английском языке предложит определить имя нового бота, его логин и выдаст в итоге ключ доступа к API (_token_).
|
||||
Там же будет написано, что этот ключ ни в коем случае нельзя передать кому-либо, поэтому при оформлении отчёта по этой работе, пожалуйста, **удаляйте _token_ из исходного кода и из скриншотов**.
|
||||
|
||||
Список доступных методов для ботов Telegram перечислен здесь: <https://core.telegram.org/bots/api#available-methods>.
|
||||
Где-то там есть и описание того, как эти методы вызывать.
|
||||
Нам пока это не особо интересно, однако знать следующие вещи стоит:
|
||||
|
||||
- бот получает обновления при помощи команды `getUpdates`.
|
||||
Эта команда позволяет возвращать те обновления, к которым имеет доступ чат-бот.
|
||||
Например, кто-то написал или отредактировал личное сообщение.
|
||||
Команда позволяет получать до 100 обновлений за один вызов.
|
||||
- при вызове команды обычно требуется объект какого-то формата на вход.
|
||||
Также обычно команда возвращает ответ в определённом формате.
|
||||
Параметры можно сериализовать в JSON-строку.
|
||||
- если кто-то пишет чат-боту сообщения, информация об этом состоит из следующих полей: <https://core.telegram.org/bots/api#message>.
|
||||
Как можете заметить, возвращается много информации, но там есть как минимум: ИД сообщения, текст сообщения, чат, из которого было получено сообщение, дата, прикреплённые аудио, фото и т.д.
|
||||
- если мы хотим отправить сообщение, следует вызвать метод `sendMessage`: <https://core.telegram.org/bots/api#sendmessage>.
|
||||
Там обязательно требуется указать ИД чата и текст нашего сообщения.
|
||||
Однако можно указать и другие поля, например, ИД сообщения, на который мы хотим ответить и список доп. кнопок для быстрых действий.
|
||||
|
||||
Также первое сообщение боту от пользователя обычно `/start`, это также стоит помнить.
|
||||
|
||||
Предположим, мы хотим написать диагностического бота, который будет реагировать на сообщения людей следующим образом:
|
||||
|
||||
- на сообщение `/start` писать, что этот бот написан в качестве учебного материала и может выполнять следующие команды: ...
|
||||
- на сообщение `/who` выводит ИД чата, ИД сообщения, ИД отправителя, имя отправителя и дату отправки сообщения.
|
||||
- на сообщение `/rand %i %j` выводит случайное число между `%i` и `%j`.
|
||||
Или сообщение об ошибке, если `%j` меньше, чем `%i`.
|
||||
- при отправке голосового сообщения должен отвечать, что он "бумер" и не понимает голосовые сообщения.
|
||||
- при отправке картинки должен всегда осыпать пользователя комплиментами по поводу красоты того, что он прислал.
|
||||
|
||||
Забавно?
|
||||
Ещё бы.
|
||||
Осталось реализовать.
|
||||
|
||||
Ход выполнения видится следующим:
|
||||
|
||||
1. Регистрация бота.
|
||||
2. Обработка получения обновлений.
|
||||
3. По каждому обновлению: если оно сообщение, то разбираем содержимое сообщения.
|
||||
4. После разбора содержимого формируем ответ.
|
||||
5. Отправляем ответ на сообщение.
|
||||
|
||||
Вроде бы всё просто, однако одновременно с этим ничего и не понятно.
|
||||
|
||||
Здесь нам придёт на помощь сообщество ИТ-специалистов, потому что многие стандартные решения уже были реализованы до нас (или нами).
|
||||
|
||||
Например, далеко не полный список библиотек для построения ботов для Telegram:
|
||||
|
||||
- для C# - <https://github.com/TelegramBots/Telegram.Bot>;
|
||||
- для Python - <https://github.com/python-telegram-bot/python-telegram-bot/wiki/Extensions-%E2%80%93-Your-first-Bot>;
|
||||
- для Java - <https://github.com/pengrad/java-telegram-bot-api>;
|
||||
- для Go - <https://github.com/go-telegram-bot-api/telegram-bot-api>.
|
||||
|
||||
Ваши задачи на эту лабораторную работу:
|
||||
|
||||
- определиться с любимым языком программирования;
|
||||
- найти популярную реализацию библиотеки для создания чат-бота в Telegram;
|
||||
- зарегистрировать чат-бота;
|
||||
- подключить чат-бота к библиотеке и проверить, что обновления приходят;
|
||||
- попытаться хоть что-нибудь ответить самому себе через программу (хотя бы тем же самым сообщением);
|
||||
- дополнить обработку ответов уже тем, что описано выше в тексте лабораторной работы;
|
||||
- продемонстрировать работу.
|
||||
|
||||
## Демонстрация работы
|
||||
|
||||
Демонстрация работы предполагает запуск бота и проверку его ответов на сообщения преподавателя в режиме реального времени.
|
Loading…
Reference in New Issue
Block a user