From 18166fa852066bc1315de82f24a6f051f4be9adc Mon Sep 17 00:00:00 2001 From: Vladislav Moiseev Date: Mon, 6 Mar 2023 22:20:52 +0400 Subject: [PATCH] Add lwB2 --- README.md | 2 +- lwB2/README.md | 86 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 87 insertions(+), 1 deletion(-) create mode 100644 lwB2/README.md diff --git a/README.md b/README.md index 2a070ff..28e9b6b 100644 --- a/README.md +++ b/README.md @@ -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) ## Правила допуска до экзамена diff --git a/lwB2/README.md b/lwB2/README.md new file mode 100644 index 0000000..84c6f6a --- /dev/null +++ b/lwB2/README.md @@ -0,0 +1,86 @@ +# Лабораторная работа №B2 - Разработка чат-бота для Telegram + +## Цель работы + +Понять концепцию построения чат-ботов на примере Telegram. + +## Ход работы + +**Чат-бот** - программа, с которой можно общаться, будто вы общаетесь с живым (но может быть и не самым умным) собеседником. + +Чат-боты служат для различных целей: в качестве напоминателей (всяческие календари), подсказчиков ("не забудь заплатить за электричество!1"), информационных служб (например, "пробить авто по номеру" или "показать погоду в Ульяновске") и много чего ещё. + +Обычно чат-бот не умеет сам писать сообщения людям, только реагировать на сообщения от людей. +Однако иногда допускается писать самостоятельно, если диалог с пользователем уже был когда-то инициирован. + +Существует множество архитектур по созданию чат-ботов для разных платформ. +Мы же рассмотрим Telegram. + +Для создания нового бота необходимо... написать боту `@BotFather`! +Он на английском языке предложит определить имя нового бота, его логин и выдаст в итоге ключ доступа к API (_token_). +Там же будет написано, что этот ключ ни в коем случае нельзя передать кому-либо, поэтому при оформлении отчёта по этой работе, пожалуйста, **удаляйте _token_ из исходного кода и из скриншотов**. + +Список доступных методов для ботов Telegram перечислен здесь: . +Где-то там есть и описание того, как эти методы вызывать. +Нам пока это не особо интересно, однако знать следующие вещи стоит: + +- бот получает обновления при помощи команды `getUpdates`. + Эта команда позволяет возвращать те обновления, к которым имеет доступ чат-бот. + Например, кто-то написал или отредактировал личное сообщение. + Команда позволяет получать до 100 обновлений за один вызов. +- при вызове команды обычно требуется объект какого-то формата на вход. + Также обычно команда возвращает ответ в определённом формате. + Параметры можно сериализовать в JSON-строку. +- если кто-то пишет чат-боту сообщения, информация об этом состоит из следующих полей: . + Как можете заметить, возвращается много информации, но там есть как минимум: ИД сообщения, текст сообщения, чат, из которого было получено сообщение, дата, прикреплённые аудио, фото и т.д. +- если мы хотим отправить сообщение, следует вызвать метод `sendMessage`: . + Там обязательно требуется указать ИД чата и текст нашего сообщения. + Однако можно указать и другие поля, например, ИД сообщения, на который мы хотим ответить и список доп. кнопок для быстрых действий. + +Также первое сообщение боту от пользователя обычно `/start`, это также стоит помнить. + +Предположим, мы хотим написать диагностического бота, который будет реагировать на сообщения людей следующим образом: + +- на сообщение `/start` писать, что этот бот написан в качестве учебного материала и может выполнять следующие команды: ... +- на сообщение `/who` выводит ИД чата, ИД сообщения, ИД отправителя, имя отправителя и дату отправки сообщения. +- на сообщение `/rand %i %j` выводит случайное число между `%i` и `%j`. + Или сообщение об ошибке, если `%j` меньше, чем `%i`. +- при отправке голосового сообщения должен отвечать, что он "бумер" и не понимает голосовые сообщения. +- при отправке картинки должен всегда осыпать пользователя комплиментами по поводу красоты того, что он прислал. + +Забавно? +Ещё бы. +Осталось реализовать. + +Ход выполнения видится следующим: + +1. Регистрация бота. +2. Обработка получения обновлений. +3. По каждому обновлению: если оно сообщение, то разбираем содержимое сообщения. +4. После разбора содержимого формируем ответ. +5. Отправляем ответ на сообщение. + +Вроде бы всё просто, однако одновременно с этим ничего и не понятно. + +Здесь нам придёт на помощь сообщество ИТ-специалистов, потому что многие стандартные решения уже были реализованы до нас (или нами). + +Например, далеко не полный список библиотек для построения ботов для Telegram: + +- для C# - ; +- для Python - ; +- для Java - ; +- для Go - . + +Ваши задачи на эту лабораторную работу: + +- определиться с любимым языком программирования; +- найти популярную реализацию библиотеки для создания чат-бота в Telegram; +- зарегистрировать чат-бота; +- подключить чат-бота к библиотеке и проверить, что обновления приходят; +- попытаться хоть что-нибудь ответить самому себе через программу (хотя бы тем же самым сообщением); +- дополнить обработку ответов уже тем, что описано выше в тексте лабораторной работы; +- продемонстрировать работу. + +## Демонстрация работы + +Демонстрация работы предполагает запуск бота и проверку его ответов на сообщения преподавателя в режиме реального времени.