Как написать бота для телеграмма в visual studio
Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Журавлев Александр Александрович
Похожие темы научных работ по компьютерным и информационным наукам , автор научной работы — Журавлев Александр Александрович
Современные мессенджеры в качестве помощника администратора базы данных i Не можете найти то, что вам нужно? Попробуйте сервис подбора литературы.CREATION TELEGRAM BOT WITH THE VISUAL STUDIO DEVELOPMENT ENVIRONMENT
A bot is a computer program, in fact, a virtual interlocutor that works on the basis of established rules and algorithms. Today chat bots can be found in various fields, for example, in business (consulting a client on a product). This article offers a description of the process of creation a Telegram bot, which responds to the user who wrote him a message using the following template: «You wrote: ‘text sent by user’». The bot is created using the Visual Studio development environment console application, as well as the Telegram.Bot package from NuGet packages manager. The result of creation a bot and assigning a certain functionality to it can be considered successful.
Текст научной работы на тему «СОЗДАНИЕ ТЕЛЕГРАМ-БОТА С ПОМОЩЬЮ СРЕДЫ РАЗРАБОТКИ VISUAL STUDIO»
Научно-образовательный журнал для студентов и преподавателей «StudNet» №12/2020
СОЗДАНИЕ ТЕЛЕГРАМ-БОТА С ПОМОЩЬЮ СРЕДЫ РАЗРАБОТКИ
CREATION TELEGRAM BOT WITH THE VISUAL STUDIO DEVELOPMENT ENVIRONMENT
Журавлев Александр Александрович, студент, Уральский федеральный университет им. Б. Н. Ельцина, ИРИТ-РтФ, г. Екатеринбург
диспетчера пакетов NuGet. Результат создания бота и присвоение ему определенного функционала можно считать успешным.
Ключевые слова: создание, Телеграм-бот, среда разработки, Visual Studio.
Keywords: creation, Telegram-bot, development environment, Visual Studio.
Бот - это компьютерная программа, фактически виртуальный собеседник, который работает на основе установленных правил и алгоритмов. Он умеет импортировать человеческое поведение во время общения с потенциальным клиентом [1].
Сегодня чат-ботов можно встретить в различных сферах, например, в бизнесе (консультирование клиента по продукту).
Чтобы понять, как работают боты необходима разработка собственного бота. В данной статье в качестве объекта исследования будет выбран Телеграм-бот.
Материалом исследования является приложение Телеграм.
В статье используется эмпирический метод исследования, поскольку основной источник результатов - моделирование.
Для создания бота, в первую очередь, необходимо добавить в контакты Telegram BotFather. Далее выполнить настройку разрабатываемого бота. Алгоритм создания бота следующий:
1. В чате BotFather выбирается команда работы с ботом: в данном случае команда /newbot (новый бот) (рисунок 1).
2. Далее боту присваивается имя (tutorialBot) (рисунок 2).
3. И наконец, создается пользовательское имя бота (messageTutorial_bot) (рисунок 3).
Результаты создания Телеграм-бота представлены ниже.
Рисунок 1 - Выбор функции /newbot
Рисунок 2- Присвоение имени боту
Рисунок 3 - Создание пользовательского имени бота
Keep your token secure and store it safely, it can be used by anyone to control your bot.
Рисунок 4 - Успешное создание бота и получение токена
Для того чтобы наделить бота определенным функционалом необходимо написать соответствующий код. С помощью консольного приложения среды разработки Visual Studio создадим такой код.
Для работы с Телеграм-ботом необходимо загрузить пакет Telegram.Bot из Диспетчера пакетов NuGet (рисунок 6).
ТЫ 6ot Aft n т MTTP-be$ed r*tff«ce otaled <or on buridng boto for Те*ефви»
Рисунок 6 - Установка пакета Telegram.Bot для работы с ботом
Ниже представлен код, который наделяет бота функционалом, описанном в разделе «Постановка задачи». using System; using Telegram.Bot; using Telegram.Bot.Args;
private static TelegramBotClient client;
static void Main(string[] args)
var me = client.GetMeAsync().Result;
public static async void OnMessage(object sender, MessageEventArgs e)
var text = e?.Message?.Text;
Результат работы программы представлен на рисунках 7 и 8.
ID бота: 110059S312. Имя бота: tutorialBot
Рисунок 7 - Данные созданного бота
Рисунок 9 - Обратная связь от бота
3. Бхаргава А.. Грокаем алгоритмы. Иллюстрированное пособие для программистов и любопытствующих. - СПб.: Питер, 2017. - 288 С.
4. Дасгупта С. Алгоритмы / С. Дасгупта, Х. Пападимитриу, У. Вазирани; Пер. с англ. под ред. А. Шеня. — М.: МЦНМО, 2014. — 320 С.
5. Клейнберг, Дж., Тардос Е.. Алгоритмы: разработка и применение. Классика Computers Science / Пер. с англ. Е. Матвеева. — СПб.: Питер, 2016. — 800 С.
6. Седжвик, Роберт, Уэйн, Кевин. Алгоритмы на Java, 4-е изд.: Пер. с англ. - М. : ООО «И.Д. Вильямс», 2013. - 848 С.
3. Bhargava A.. Grokah algorithms. Illustrated guide for programmers and curious. - St. Petersburg: Peter, 2017 . - 288 P.
4. Dasgupta S. Algorithms / S. Dasgupta, H. Papadimitriou, U. Wazirani; Translate from English under the editorship of A. Shen. - M: 2014. - 320 P.
5. Kleiberg J., Tardos E.. Algorithms: development and application. Classic Computers Science / Translate from Eng E. Matveeva. - St. Peterburg: Peter, 2016. - 800 P.
Шаг первый. Создаем оформление бота через Botfather
В этот шаг я скопировал часть статьи из бота на php, так как тут все действия у нас будут полностью идентичны.
Там все крайне просто, вбиваем /help и смотрим на список доступных команд:
Ну и чтобы проверить установилась картинка или нет переходим на бота вбивая его имя через собачку в поиск
Теперь самое время заняться backend частью, а именно написанием кода для команд нашего бота, но сначала настроим среду разработки.
Шаг второй. Среда разрабтки
И вот среда для разработки у нас готова:
Собственно время устанавливать нужные нам компоненты.
Шаг третий. Установка компонент
В качестве обертки для работы с API мы будем использовать пакет под названием telegram.bot, его мы и будем устанавливать в наш проект. Идем в Project->Manage Packages
Отлично, если вы проделали все эти действия то можно переходить уже и к кодингу.
Шаг третий. Написание кода
Собственно для начала сделаем простейший интерфейс. Переключаемся на вкладку MainForm -> Design, после чего кидаем на форму одну кнопку и одно текстовое поле.
Далее добавляем инициализацию нашей переменной в конструкторе класса, а так-же запилим запуск воркера по клику кнопочки.
вот примерно так и должно быть у вас в начале. Теперь нам надо передать токен из текстового поля формы в обработчик воркера и там использовать. Звучит конечно писец как сложно но делается очень просто:
Теперь настало время получения данных из бота. То есть время работы с API телеграма. Собственно инициализация API выглядит так:
Наш бот работает. Без регистрации домена, указания SSL, подключения cloudflare и прочих муторных вещей.
Отправка картинок
Запускаем, тыкаем кнопочку и тестируем:
С отправкой документов я не буду мучиться потому что тут придется писать OpenFileDialog и прочие вещи описывать на которые тут просто не хватит места, статья и без того длинная.
Задаем список команд
Как это сделать я уже писал и не вижу ни малейшего смысла писать это снова. Просто прочитайте тут.
Ответы на сложные вопросы:
Советую вам сначала скачать исходники внизу статьи и просматривать блоки кода, которые я привожу, прямо на месте!
Inline кнопки и их обработка:
Выводятся кнопки таким кодом:
Reply-кнопки
Выводятся и обрабатываются таким кодом:
Без исходников все мои слова были бы бесполезны. Как говорится можно десять раз прочитать и не понять, а можно один раз посмотреть код и все понять. Да, к стати, проект открывается в visual studio, я проверял.
Шаг 1: Теория.
Кроме объединения вышеупомянутых технологий в одну модель в MVC был добавлен ряд дополнительных функций.
Паттерн MVC и с чем его едят.
По словам Википедии, паттерн (англ. design pattern) — повторимая архитектурная конструкция, представляющая собой решение проблемы проектирования в рамках некоторого часто возникающего контекста. Например способ проектирования "сверху вниз" можно отнести к одним из первых паттернов проектирования.
Model-View-Controller. MVC — это фундаментальный паттерн, который нашел применение во многих технологиях, дал развитие новым технологиям и каждый день облегчает жизнь разработчикам.
Впервые паттерн MVC появился в языке SmallTalk . Разработчики должны были придумать архитектурное решение, которое позволяло бы отделить графический интерфейс от бизнес логики, а бизнес логику от данных. Таким образом, в классическом варианте, MVC состоит из трех частей, которые и дали ему название.
Model.
Под Моделью, обычно понимается часть содержащая в себе функциональную бизнес-логику приложения. Модель должна быть полностью независима от остальных частей продукта. Модельный слой ничего не должен знать об элементах дизайна, и каким образом он будет отображаться. Достигается результат, позволяющий менять представление данных, то как они отображаются, не трогая саму Модель.
Модель обладает следующими признаками:
- Модель — это бизнес-логика приложения;
- Модель обладает знаниями о себе самой и не знает о контроллерах и представлениях;
- Для некоторых проектов модель — это просто слой данных (DAO, база данных, XML-файл);
- Для других проектов модель — это менеджер базы данных, набор объектов или просто логика приложения;
В обязанности Представления входит отображение данных полученных от Модели. Однако, представление не может напрямую влиять на модель. Можно говорить, что представление обладает доступом «только на чтение» к данным.
Представление обладает следующими признаками:
- В представлении реализуется отображение данных, которые получаются от модели любым способом;
- В некоторых случаях, представление может иметь код, который реализует некоторую бизнес-логику. Но только в некоторых случаях(!) и вообще я этого не говорил:-)
Примеры представления: HTML-страница, WPF форма, Windows Form.
Controller.
Контроллер обеспечивает «связи» между пользователем и системой . Контролирует и направляет данные от пользователя к системе и наоборот. Использует модель и представление для реализации необходимого действия.
- Контроллер определяет, какие представление должно быть отображено в данный момент;
- События представления могут повлиять только на контроллер.контроллер может повлиять на модель и определить другое представление.
- Возможно несколько представлений только для одного контроллера;
Основная идея этого паттерна в том, что и контроллер и представление зависят от модели, но модель никак не зависит от этих двух компонент.
Итак, контроллер перехватывает событие извне и в соответствии с заложенной в него логикой, реагирует на это событие изменяя Mодель, посредством вызова соответствующего метода. После изменения Модель использует событие о том что она изменилась, и все подписанные на это события Представления, получив его, обращаются к Модели за обновленными данными, после чего их и отображают.
Начинающие программисты очень часто трактуют архитектурную модель MVC как пассивную модель MVC: модель выступает исключительно совокупностью функций для доступа к данным, а контроллер содержит бизнес-логику. В результате — код моделей по факту является средством получения данных из СУБД, а контроллер — типичным модулем, наполненным бизнес-логикой. В результате такого понимания — MVC-разработчики стали писать код, который Pádraic Brady (известный в кругах сообщества «Zend Framework» (Толстые, тупые, уродливые контроллеры или ТТУК).
Наиболее наглядно эта проблема описана статье The M in MVC: Why Models are Misunderstood and Unappreciated Pádraic Brady. Вот перевод этой статьи.
Среднестатистический ТТУК получал данные из БД (используя уровень абстракции базы данных, делая вид, что это модель) или манипулировал, проверял, записывал, а также передавал данные в Представлении. Такой подход стал очень популярен потому, что использование таких контроллеров похоже на классическую практику использования отдельного php-файла для каждой страницы приложения.
Но в объектно-ориентированном программировании используется активная модель MVC, где модель — это не только совокупность кода доступа к данным и СУБД, но и вся бизнес-логика; также, модели могут инкапсулировать в себе другие модели. Контроллеры же, — как элементы информационной системы, — ответственны лишь за:
- приём запроса от пользователя;
- анализ запроса;
- выбор следующего действия системы, соответственно результатам анализа (например, передача запроса другим элементам системы).
Только в этом случае контроллер становится «тонким» и выполняет исключительно функцию связующего звена (glue layer) между отдельными компонентами информационной системы.
Ох уж эти паттерны… Я надеюсь что мои формулировки не взорвали моит немногочисленным читателям мозг. Если вы не поняли то, что я писал — не переживайте. Паттерны вообще не самая простая тема, а среди всех MV- паттернов — MVC, на мой взгляд, вообще является одним из самых сложных для понимания. Так или иначе я постарался доступно объяснить его суть. Это одна из тех вещей, которая коде выглядит не так страшно и более понятно. По этому погнали!
Шаг 2: Практика.
Проект, который создается в Visual Studio, будет во многом напоминать проект для MVC за тем исключением, что в нем не будет представлений.
Первым делом переименуем ValuesController.cs в MessageController , и выпилим оттуда все. Оставим пустой класс с обработкой GET -запроса:
Запустим нашу прилку и перейдем по ссылке localhost:XXXX/api/message/update . Получили результат Method GET unuvalable (ура мы крутые прогеры!).
Model first.
Для написания проекта будем использовать подход “model first”. Он заключается в том, что сначала необходимо разработать модель приложения и написать логику, затем нарисовать Представление, а уже потом склеить это дело контроллером.
Итак, нам нужен сам бот для телеги. Давайте опишем его модель. Пошли кодить? Неет. Сначала обдумаем а как эту модель реализовать.
У бота есть несколько параметров конфигурации: токен, имя, и url сайта, где он лежит. Значит это настройки бота. и их можно описать в отдельном классе. Создадим папку Models а в ней класс AppSettings.cs:
Отлично! Теперь опишем бота? Подождите. Бот такая сущность которая должна содержать команды и выполнять их. А значит нам нудны еще эти самые команды. Как должна выглядеть команда? Каждая команда как-то называется, значит содержит свойство Name. Команда должна определять вызвали ее или нет: содержать булеву функцию Contains(. ) . И уметь выполнять себя - Execute(. ) . И последнее: команд может быть много, значит нужен какой то абстрактный класс.
Теперь создадим папку Commands внутри папки Models и запихнем туда класс Command.cs:
Здесь Execute возвращает не void, а Task, так как команда может выполняться и асинхронно.
Ну что же, пришла пора писать бота. Любой телеграм бот должен содержать клиента TelegramBotClient, а также наш бот должен содержать команды. Их будет много, а значит нам нужна их коллекция. К томуже бот должен уметь возвращать TelegramBotClient-а для вызова его из команд.
Создаем класс Bot.cs:
Я думаю, комментарии излишни.
Теперь научим его приветствовать нас. Добавим класс StartCommand.cs:
Осталось сконфигурировать бота, и сказать нашему приложению, что бот у нас есть. Идем в класс Startup и в методе Configure приписываем в конец:
Финальный аккорд. Добавим клея!
Литература
Вот скромный список того, что удалось найти:
Как видите список даже англоязычной литературы ограничивается тремя книгами. А официальных книг от MS нет даже по первой версии. Но метод научного тыка никто не отменял!
Шаг первый. Создаем оформление бота через Botfather
В этот шаг я скопировал часть статьи из бота на php, так как тут все действия у нас будут полностью идентичны.
Там все крайне просто, вбиваем /help и смотрим на список доступных команд:
Ну и чтобы проверить установилась картинка или нет переходим на бота вбивая его имя через собачку в поиск
Теперь самое время заняться backend частью, а именно написанием кода для команд нашего бота, но сначала настроим среду разработки.
Шаг второй. Среда разрабтки
И вот среда для разработки у нас готова:
Собственно время устанавливать нужные нам компоненты.
Шаг третий. Установка компонент
В качестве обертки для работы с API мы будем использовать пакет под названием telegram.bot, его мы и будем устанавливать в наш проект. Идем в Project->Manage Packages
Отлично, если вы проделали все эти действия то можно переходить уже и к кодингу.
Шаг третий. Написание кода
Собственно для начала сделаем простейший интерфейс. Переключаемся на вкладку MainForm -> Design, после чего кидаем на форму одну кнопку и одно текстовое поле.
Далее добавляем инициализацию нашей переменной в конструкторе класса, а так-же запилим запуск воркера по клику кнопочки.
вот примерно так и должно быть у вас в начале. Теперь нам надо передать токен из текстового поля формы в обработчик воркера и там использовать. Звучит конечно писец как сложно но делается очень просто:
Теперь настало время получения данных из бота. То есть время работы с API телеграма. Собственно инициализация API выглядит так:
Наш бот работает. Без регистрации домена, указания SSL, подключения cloudflare и прочих муторных вещей.
Отправка картинок
Запускаем, тыкаем кнопочку и тестируем:
С отправкой документов я не буду мучиться потому что тут придется писать OpenFileDialog и прочие вещи описывать на которые тут просто не хватит места, статья и без того длинная.
Задаем список команд
Как это сделать я уже писал и не вижу ни малейшего смысла писать это снова. Просто прочитайте тут.
Заключение
Как вы уже поняли данный способ создания бота позволяет вам обойтись без покупки сервера, домена и прочих вещей, так как вы можете разместить бота прямиком на своем собственном ноутбуте/компьютере. Причем без велосипедов вроде денвера или опен-сервера.
То-же самое можно написать и на nodejs, к примеру.
Надеюсь эта статья поможет вам.
Без исходников все мои слова были бы бесполезны. Как говорится можно десять раз прочитать и не понять, а можно один раз посмотреть код и все понять. Да, к стати, проект открывается в visual studio, я проверял.
Читайте также: