Как написать бота в телеграмме на c
Перейти к содержимому

Как написать бота в телеграмме на c

  • автор:

Как создать telegram бот на C# быстро?

В этой статье мы рассмотрим заготовку для создания телеграм бота на C#. В связи с последними обновлениями TelegramBotAPI, большая часть удачных с моей точки зрения публикаций на эту тему несколько устарело. Потому я принял решение написать статью на эту тему.

Процесс создания и отладки бота был записан и освещен в видеоролике в статье ниже. В телеграм группе можно задать вопрос по данной тематике.

Чуть подробнее

Мы будем пользоваться библиотеками Telegram.Bot и Telegram.Bot.Extentions.Polling, обновления будем получать периодически опрашивая Telegram сервер на наличие новых обновлений. Webhook’и мы использовать не будем. Тпру, подождите меня забрасывать гнилыми помидорами, матерые кодеры! Да, метод получения обновлений основанный на Webhook’ах лучше, но Polling проще в реализации поскольку не нужно получать SSL-сертификат и бот можно запустить сразу после написания кода без дополнительных заморочек. На этом новичок может застопориться. К тому же есть ряд нюансов при использовании Webhook’ов на моем сервере. Если они есть у меня, значит они могут быть и у Вас. Потому используем метод периодического опроса сервера Телеграма на наличие новых обновлений. Ладно, уважаемый читатель, если Вы все еще со мной не согласны и желаете получить сертификат и работать на Webhook’ах, можешь почитать о получении сертификата в этой статье.

Существующие схемы работы telegram бота

Мне нравится схема работы telegram бота на C#, описанная в этой статье. Считаю ее хорошим примером. Вот код:

Там ничего лишнего. Создаем объект TelegramBotClient чтобы взаимодействовать с нашим ботом с помощью библиотеки, прописываем ему токен, который выдал нам BotFather. Далее создаем событие OnMessage, обрабатываем его методом BotOnMessageReceived и запускаем клиент.

Однако с выходом более новых версий TelegramBotAPI оказалось, что такая схема больше не работает. Более того, боты, написанные на более ранних версиях Telegram.Bot перестают работать после обновления библиотеки.

Нужно использовать другую схему. Давайте попробуем в этом разобраться.

Пошаговая инструкция

Итак ниже я набросал следующий список шагов, которые приведут вас к рабочему telegram боту.

1. Запускаем Visual Studio Community, создаем консольное приложение.

Если у Вас отсутствует Visual Studio Community, Вы можете установить ее используя статью или несколько устаревшее видео. При этом желательно выбирать установку Visual Studio Community 2022 как наиболее актуальную версию на текущий момент.

Создаем проектСоздаем проект Называем проект как нам удобноНазываем проект как нам удобно Выбираем платформу .NET 3.1Выбираем платформу .NET 3.1 Проект создан!Проект создан!

2. Добавляем в консольное приложение библиотеку Telegram.Bot, Telegram.Bot.Extentions.Polling и Netonsoft.Json

Открытие NuGetОткрытие NuGet Поиск библиотекиПоиск библиотеки Установка пакетаУстановка пакета

По завершению у Вас должны быть установлены и отображены названия пакетов, которые мы установили.

Netonsoft.Json применимо к нашей заготовке нужна для того, чтобы у нас была возможность вывести на консоль сообщение от пользователя.

3. Создаем telegram бот в BotFather. Копируем его api key для работы.

Находим в telegram BotFather, отправляем ему /newbot, название и логин бота

BotFather должен нам предоставить API key, который мы должны вставить в код-каркас в следующем шаге в строке

static ITelegramBotClient bot = new TelegramBotClient(«TOKEN»);

4. В файл Program.cs вставляем следующий код-каркас:

5. Редактируем код под свои нужды и задачи.

Главное задачей, которую должен выполнять бот — это реагировать на сообщения, которые отправляет ему пользователь. Конечно, разработчики telegram’a заложили возможность отслеживания и реагирования на много других событий.

К важным я бы отнес еще нажатие кнопки inline клавиатуры пользователем, inline mode — когда пользователь вводит логин бота и поисковой запрос в текстовое поле и бот предоставляет список найденных объектов по этому запросу. Также интересно было бы рассмотреть событие публикации нового поста на канале. Получение от пользователя его номера телефона, файла или геолокации. Но это материал для следующих видеороликов и статей. Если Вам интересно увидеть этот материал на YouTube канале или в статье, ставьте лайки, делитесь статьей с друзьями. При достижении 200 лайков и 20 комментариев я буду знать, что вам нравится данная тема и напишу продолжение.

Итак что мы можем сделать когда пользователь отправил нашему боту сообщение?
Во-первых мы можем вывести ее на консоль. Для этого в Nuget установим либу Newtonsoft и пропишем в методе HandleUpdateAsync.

Конечно, мы можем проверить что он нам прислал. И если текст сообщения будет тем, который мы ждем, выполнить определенные действия.Например если пользователь нажал кнопку Start и тем самым отправил боту текст «/start», мы можем отправить ему в ответ «Добро пожаловать на борт, добрый путник!».

if (update.Type == Telegram.Bot.Types.Enums.UpdateType.Message)
Здесь мы проверяем тип обновления. Если пользователь отправил нам сообщение, выполняем ниже описанные действия.

var message = update.Message;
Создаем новую переменную для удобства и записываем в нее всю информацию о пришедшем сообщении.

if (message.Text.ToLower() == «/start»)
Проверяем какой текст отправил пользователь. Если текст сообщения в нижнем регистре (.ToLower()) является словом «/start», то пишем ему сообщение «Добро пожаловать на борт, добрый путник!». И останавливаем выполнение метода командой return.

Целесообразно также данные этого пользователя записать в какую-нибудь базу данных. Например MySQL, PostgreSQL или еще какую-то. Или просто в файл. Напишите в комментариях если Вам это интересно.

А если пользователь отправит боту другое сообщение, например «Здравствуй», мы можем написать боту, например, «Здоров, братан! И тебе не хворать»

await botClient.SendTextMessageAsync(message.Chat, «Здоров, братан! И тебе не хворать!»);

Думаю принцип вы поняли.

Полный код ниже:

Не забудьте вставить в код API key от Вашего бота там, где написано TOKEN.

Для удобства записал видео.

Заключение

Итак в этой статье мы с вами создали telegram бот с нуля и протестировали его на работоспособность. Созданную заготовку можно будет использовать в дальнейшем для создания полномасштабных коммерческих проектов.

Telegram Bot API: как написать на C++

FAQ

Каждый пользователь мессенджера «Телеграм» может захотеть создать или установить собственного бота. Этот процесс своеобразный и требует неких умений. Поговорим об этом подробнее.

Что такое боты

Как прописать телеграм-бот на С++

Боты – запускающие внутри Telegram утилиты. Проще говоря, это отдельные учетные записи, управление которыми выполняется не людьми, а непосредственно программным обеспечением.

Их назначение

Телеграм бот на C имеет широкую область применения. Он может общаться, принимать и отправлять сообщения в чат, а также выполнять поступающие команды.

Все записи кодируются в HTTPS-запросы и обрабатываются bot-алгоритмом.

Приложение упрощает процесс взаимодействия с пользователем. Робот предоставляет свежую новостную информацию, позволяет осуществлять перевод текста, покупать и продавать товар.

Категории

Все bots утилиты для Telegram bot API C можно разделить на ряд категорий, каждая из которых имеет свое применение:

  1. Интеграционные. Интегрируются с другими приложениями. Помощник скачивает информацию с посторонних ресурсов и выкладывает ее в чат.
  2. Расчетные. Осуществляют прием платежей от пользователей мессенджера. Также приложение может работать как виртуальный магазин или является продавцом настроенных платных услуг.
  3. Информационные. Предоставляют информацию о погоде. Данные берутся с прописанного в приложении сервера.
  4. Развлекающие. Telegram бот на C может предложить находящиеся в библиотеке развлечения HTML5, а также ряд развлекательных игр.
  5. Чат-боты. Предоставляют пространство для общения двух собеседников или более лиц. Поддерживает создание группы для беседы по интересам.

Особенности и описание С++

C++ – популярный язык программирования. Поддерживает ряд парадигм. Имеет выраженную поддержку объектно-ориентированного и обобщенного програм-мирования. Обладает упрощенным api интерфейсом. Используется для создания Tелеграм бот на C.

Как прописать бот на С

Создавать Telegram bot C сложно.

  1. Запускаем свой мессенджер. Версия приложения и используемый девайс не имеют значения.
  2. В окне поиска каналов пишем BotFather. Нажимаем на найденный файл, жмем кнопку внизу «Запустить».
  3. В предложенном прокси меню находим и кликаем /newbot.
  4. Выбираем имя помощника. Прописываем его в соответствующую графу.
  5. Придумываем и записываем имя пользователя.
  6. Копируем цифровой токен. Эта информация конфиденциальна. Ее распространение посторонним лицам чревато потерей помощника.
  7. Получаем подтверждение от BotFather об установке бота. Проверяем его работоспособность.

Создание робота завершено. Никакая дополнительная настройка не требуется. Если все было выполнено по примеру, то у вас не должно возникнуть никаких трудностей.

Преимущества

Бот Tелеграмм C, созданный на языке программирования C++, обладает рядом преимуществ, к которым можно отнести:

  1. Высокий уровень совместимости с языками Си.
  2. Повышенная вычислительная производительность.
  3. Поддержка большого количества стилей программирования сайта.
  4. Управление константностью объектов.
  5. Доступность пользования благодаря ряду обучающих материалов.
  6. Автоматический вызов деструкторов объектов.
  7. Использование шаблонов С++, позволяющих строить алгоритмы для данных различных типов.
  8. Возможность встраивания дополнительных языков программирования в основной код.
  9. Перегрузка используемых операторов.

Выводы

Боты утилиты имеют много функций, позволяющих абоненту мессенджера получать ряд полезной информации без дополнительных усилий. При необходимости можно воспользоваться видео из интернета для создания помощника на языке С++.

.NET Core в действии: пишем бота для telegram.

В предыдущей статье я немного затронул .NET Core и ввел некоторые определения. Этой статьей я хочу показать как с ним работать и что из этого может получиться. Примером — будет простой бот для telegram. Помимо самого кода, в этой статье я постараюсь объяснить некоторые принципы проектирования Web приложений на C# и .NET Core 2.0, а также рассказать о некоторых особенностях telegram, и дать некоторую литературу по данному направлению. Для всех ГУРУ и тех кому не терпится посмотреть: смотрите вот этот репозиторий на github. Тут уже находится необходимый шаблон для написания бота (кстати лежит он у меня довольно давно и эта и предыдущая статьи должны были выйти раньше, но время. его как всегда не хватает). Ну хватит лирики. Погнали кодить!

Шаг 1: Теория.

Тут я расскажу о ASP.NET Core 2.0, немного затрону его отличия от обычного человеческого ASP.NET, расскажу о паттерне проектирования MVC. Знающие люди смело могут перейти к шагу 2. Вся литература все равно будет продублирована в конце. Вы ничего не пропустите.

Еще немного теории о .NET Core…

Платформа ASP.NET Core представляет технологию от компании Microsoft, предназначенную для создания различного рода веб-приложений: от небольших веб-сайтов до крупных веб-порталов и веб-сервисов.

С одной стороны, ASP.NET Core является продолжением развития платформы ASP.NET. Но с другой стороны, это не просто очередной релиз. ASP.NET Core фактически делает революцию всей платформы, ее качественное изменение. Как вы уже поняли, ASP.NET Core работает поверх кросс-платформенной среды .NET Core, которая может быть развернута на основных популярных ОС: Windows , Mac OS X , Linux .

Как следует из примера 2 прошлой статьи — теперь развертывания сайта на ASP.NET Core может производится внутри самого приложения. Для этого используется кросс-платформенный веб-сервер Kestrel , который уже строен “из коробки”, однако традиционный IIS — никто не отменял. Это позволяет осуществлять более гибкую настройку: пользуетесь Linux и хотите демонезировать приложение (обернуть в Service) — пожалуйста, обернуть сайт в docker — никаких проблем. С .NET Core все стало гораздо прозрачнее и понятней.

Благодаря модульности фреймворка все необходимые компоненты веб-приложения могут загружаться как отдельные модули через Nuget (он к стати совсем недавно стал работать намного быстрее, хотя иногда он тупит и тогда приходится идти пить чай после команды restore). В добавок, в .NET Core 2.0, в отличие от 1.0 больше не обязательно использовать библиотеку System.Web.dll .

ASP.NET Core включает в себя фреймворк MVC , который объединяет функциональность MVC, Web API и Web Pages. В предыдущих версии платформы данные технологии реализовались отдельно и поэтому содержали много дублирующей функциональности. Сейчас же они объединены в одну программную модель ASP.NET Core MVC. А Web Forms полностью ушли в прошлое.

Кроме объединения вышеупомянутых технологий в одну модель в MVC был добавлен ряд дополнительных функций.

Одной из таких функций являются тэг-хелперы (tag helper), которые позволяют более органично соединять синтаксис html с кодом С#. Да, в отличии от ASP.NET хтмл фойлы тепеть хранятся в новом формате CSHTML. Признаюсь, когда я впервые увидел tag helper-ы с их @ и < - у меня потекла кровь из глаз. почему-то сразу вспомнился qBASIC , 1С , template-ы в крестах и GOTO (Никогда не пишите на qBASIC))). Но после пары часов я понял, что это в прицепе помогает (хотя нет, это ужасно и я стараюсь их избегать). И напоследок, для обработки запросов теперь используется новый конвейер HTTP, который основан на компонентах Katana и спецификации OWIN . А его модульность позволяет легко добавить свои собственные компоненты. Да, web-api стало писать намного удобнее.

Резюмируя, можно выделить следующие ключевые отличия ASP.NET Core от предыдущих версий ASP.NET:

  • Новый легковесный и модульный конвейер HTTP-запросов
  • Возможность развертывать приложение как на IIS, так и в рамках своего собственного процесса
  • Использование платформы .NET Core и ее функциональности
  • Распространение пакетов платформы через NuGet
  • Интегрированная поддержка для создания и использования пакетов NuGet
  • Единый стек веб-разработки, сочетающий Web UI и Web API
  • Конфигурация для упрощенного использования в облаке
  • Встроенная поддержка для внедрения зависимостей
  • Расширяемость
  • Кроссплатформенность: возможность разработки и развертывания приложений ASP.NET на Windows, Mac и Linux
  • Развитие как open source, открытость к изменениям

Паттерн 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. Вот перевод этой статьи.

Но в объектно-ориентированном программировании используется активная модель MVC, где модельэто не только совокупность кода доступа к данным и СУБД, но и вся бизнес-логика; также, модели могут инкапсулировать в себе другие модели. Контроллеры же, — как элементы информационной системы, — ответственны лишь за:

  • приём запроса от пользователя;
  • анализ запроса;
  • выбор следующего действия системы, соответственно результатам анализа (например, передача запроса другим элементам системы).

Только в этом случае контроллер становится «тонким» и выполняет исключительно функцию связующего звена (glue layer) между отдельными компонентами информационной системы.

Ох уж эти паттерны… Я надеюсь что мои формулировки не взорвали моит немногочисленным читателям мозг. Если вы не поняли то, что я писал — не переживайте. Паттерны вообще не самая простая тема, а среди всех MV- паттернов — MVC, на мой взгляд, вообще является одним из самых сложных для понимания. Так или иначе я постарался доступно объяснить его суть. Это одна из тех вещей, которая коде выглядит не так страшно и более понятно. По этому погнали!

Шаг 2: Практика.

И так запускаем нашу любимую Visual Studio 2017 — создаем новый проект с названием TelegrammAspMvcDotNetCoreBo t: .NET Core -> Веб приложение .NET Core. Тип приложения: WebAPI, Версия платформы: .NET Core 2.0.

Web API в ASP.NET Core

Проект, который создается в Visual Studio, будет во многом напоминать проект для MVC за тем исключением, что в нем не будет представлений.

Web API в ASP.NET Core

Первым делом переименуем 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 приписываем в конец:

Финальный аккорд. Добавим клея!

Теперь наш контроллер научился обрабатывать сообщения из телеги. Осталось только залить это дело на сервер, и получить ключ от botFather.

В нашем боте мы используем WebHook и для него необходимы HTTPS соединение + Домен. Если вам лень замораживаться, то вы всегда можете задиплоить его на Azure. Не забудьте задать ему URL перед заливкой.

Литература

.Net Core 2.0 вышла совсем недавно, а по этому по ней нет русскоязычной литературы. Честно обошел весь дом книги на Невском, и библиоглобус в Москве. В первом случае вообще нет какой-то внятной литературы (удивление), удалось найти только по .Net Core 1.0, да и то сомнительного качества (я надеюсь Петербуржцы не будут кидать в меня камнями). В Москве выбор чуть больше, но вся русскоязычная литература опять же по версии 1.0. Возможно, я не там искал, тогда буду рад какой-либо информации.

Вот скромный список того, что удалось найти:

Как видите список даже англоязычной литературы ограничивается тремя книгами. А официальных книг от MS нет даже по первой версии. Но метод научного тыка никто не отменял!

Пишем бота telegram на C#

Как я и обещал — пишу вторую статью по созданию ботов к известному мессенджеру telegram. В этот раз речь пойдет о языке C# и о создании полноценного бота на нем. И так, начнем, пожалуй.

Шаг первый. Создаем оформление бота через Botfather

В этот шаг я скопировал часть статьи из бота на php, так как тут все действия у нас будут полностью идентичны.

BotFather — это такой бот(официальный), через которого регистрируют все остальные боты. Без него нам никак не обойтись, поэтому давайте откроем telegram и перейдем по ссылке — BotFather

Там все крайне просто, вбиваем /help и смотрим на список доступных команд:

Собственно сейчас нас интересует команда /newbot, пишем ее и создаем бота указывая его название. В данном случае я назову своего бота — Рев.ком.стих и будет он у нас выдавать стихи о Маяковского и Есенина (когда я его доделаю, однако весь процесс в эту статью я включать не буду).

Нам выдадут токен, на скриншоте он замазан в целях…, ну вы сами понимаете. Этот токен нам и нужен, сохраните его куда-нибудь в текстовый файл, он нам еще пригодится.

Далее можно задать оформление для бота. Например картинку — логотип. Для этого используем команду /setuserpic после чего загружаем картинку. Так-же задаются описание бота и прочие вещи до которых вы допрете и без моего участия.

Ну и чтобы проверить установилась картинка или нет переходим на бота вбивая его имя через собачку в поиск

Теперь надо сделать боту доступ к сообщениям пользователей, то есть выключить нахер приватный режим. Если мы планируем добавлять бота в группы или конфы, назовите как хотите, в любом случае приватность нам нахер не нужна. Чтобы ее выключить вбиваем команду /setprivacy после чего выбираем пункт — disabled. Обязательно выполните этот шаг, если вы хотите сделать действительно интерактивного бота.

Теперь самое время заняться backend частью, а именно написанием кода для команд нашего бота, но сначала настроим среду разработки.

Шаг второй. Среда разрабтки

В случае с c# мы будем использовать кроссплатформенную и совершенно бесплатную ide — SharpDevelop в которую уже предустановлены все необходимые для нас плагины такие как nuget package manager. Это во первых экономит мне время, во вторых ресурсы. Тяжелая visual studio тащит за собой кучу уже давно неакутальных и ненужных вещей, да к тому-же платная. Выглядит она конечно приятнее, но для меня такие мелочи не самое главное, мне главное — результат (это нифига не мелочи, Visual Studio 2017 стоит 37 000 рублей).

Короче если у вас не стоит — установите, она весит не много. К тому-же проекты написанные в ней целиком совместимы с visual studio, то есть написанное можно будет потом перенести и туда тоже.

И выбираем тип, так как писать мы будем на C# то выбор очевиден:

И вот среда для разработки у нас готова:

Собственно время устанавливать нужные нам компоненты.

Шаг третий. Установка компонент

В качестве обертки для работы с API мы будем использовать пакет под названием telegram.bot, его мы и будем устанавливать в наш проект. Идем в Project->Manage Packages

Перед нами появится менджер пакетов, который сам найдет нужный нам пакет из интернета, скачает его и установит в ваше приложение для использования. Ищем там наш компонент и тыкаем «Add»:

И вот наш пакет добавился, его видно в solution explorer’е

Отлично, если вы проделали все эти действия то можно переходить уже и к кодингу.

Шаг третий. Написание кода

Собственно для начала сделаем простейший интерфейс. Переключаемся на вкладку MainForm -> Design, после чего кидаем на форму одну кнопку и одно текстовое поле.

Вообще я рассчитываю что у вас есть некий базовый опыт программирования на C#, потому что полностью описывать тут все действия у меня просто не хватит места. В любом случае после оформления стоит перейти к написанию кода.

Для начала стоит вспомнить о главном преимуществе C# — асинхронности. Я буду писать код в двух потоках и в качестве второго потока буду использовать класс BackgroundWorker. Просто создаем переменную этого класса и среда сама предложит нам установить необходимые зависимости.

Да, это еще одна вещ за которую я просто обожаю C#. Мне достаточно знать имя класса, а где он находится система знает и без меня.

Далее добавляем инициализацию нашей переменной в конструкторе класса, а так-же запилим запуск воркера по клику кнопочки.

вот примерно так и должно быть у вас в начале. Теперь нам надо передать токен из текстового поля формы в обработчик воркера и там использовать. Звучит конечно писец как сложно но делается очень просто:

Вообще тот кто кодил на C# по больше моего конечно смог бы реализовать это все элегантнее, наверное, но я не из таких. К тому-же далеко не всем известны примочки многопоточности встроенные в этот язык. Там еще есть классы Thread и ThreadPool, а еще полу-асинхронные async и await.

Теперь настало время получения данных из бота. То есть время работы с API телеграма. Собственно инициализация API выглядит так:

Так как мы не используем WebHook то … будем получать обновления бота «вручную», я не знаю как это можно более корректно назвать. Короче раз в секунду телеграм предоставляет ботам информацию о всех сообщениях, которые за это время поступили в бота. Эту информацию можно получать автоматически на https домен, так мы делали на php, а можно получать в бесконечном цикле внутри потока, что мы сейчас и собираемся сделать. Поток у нас есть, осталось сделать цикл и получать обновления. Собственно последнее выполняется вызовом Bot.GetUpdatesAsync(offset) который возврщает массив обновлений начиная с отступа «offset».

И так, в цикле мы перебираем обновления, теперь надо взять обновления нужного нам типа, получить их содержимое и обработать. В данном случае давайте обработаем команду «/saysomething», для этого нам надо отловить обновление типа текстовое сообщение и если текст этого сообщения совпадает с «/saysomething» значит выдать в ответ в тот-же чат строчку «тест».

Запустим теперь наше приложение, вставим токен и нажмем кнопку «поехали».

Отлично, а теперь в телеграм-боте вобьем нашу команду и посмотрим придет ли ответ:

Наш бот работает. Без регистрации домена, указания SSL, подключения cloudflare и прочих муторных вещей.

Отправка картинок

Чтобы отправить картинку надо отправить ссылку на нее самому telegram’у, он сам все загрузит и сделает за нас. Заставим нашего бота по команде «/getimage» отсылать нам вот эту картинку.

Запускаем, тыкаем кнопочку и тестируем:

С отправкой документов я не буду мучиться потому что тут придется писать OpenFileDialog и прочие вещи описывать на которые тут просто не хватит места, статья и без того длинная.

Задаем список команд

Как это сделать я уже писал и не вижу ни малейшего смысла писать это снова. Просто прочитайте тут.

Заключение

Как вы уже поняли данный способ создания бота позволяет вам обойтись без покупки сервера, домена и прочих вещей, так как вы можете разместить бота прямиком на своем собственном ноутбуте/компьютере. Причем без велосипедов вроде денвера или опен-сервера.

То-же самое можно написать и на nodejs, к примеру.

Надеюсь эта статья поможет вам.

Скачать исходники

Без исходников все мои слова были бы бесполезны. Как говорится можно десять раз прочитать и не понять, а можно один раз посмотреть код и все понять. Да, к стати, проект открывается в visual studio, я проверял.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *