Как создать чат бота в Телеграмме на c

В этом выпуске мы я покажу вам, как создать телеграм-бота на .NET Core и C#.
Кроме того, мы развернем его на бесплатном аккаунте heroku.

Материалы выпуска:
— Код со стрима на GitHub: https://github.com/itbeard/telegram-bot
— Telegram Bot API: https://core.telegram.org/bots/api
— Telegram Bot API библиотека для .NET: https://github.com/TelegramBots/Telegram.Bot
— Билдер для.NET Core под heroku: https://github.com/jincod/dotnetcore-buildpack

Таймлайн стрима:
09:25 — Что нужно что бы написать бота
10:25 — Создаем бота-прослойку
16:09 — Про API телеграма
20:02 — Рассматриваем библиотеку для c# и создаем бэкенд простого бота
01:06:50 — Разбираем сложного бота на примере бота сообщества ITYouTubersRu
01:18:30 — Ограничения Telegram Bot API
01:19:12 — Про выкатку (деплой) воркера на heroku
01:40:28 — Включение воркера на бесплатнох heroku
01:47:55 — Немного про бесплатный Postgres на Heroku и про его настройку под .NET Core

Уроки C# – Создаём Telegram бота

Источник: best-coding.ru

Написание бота для Telegram — Пишем бота 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 и прочие вещи описывать на которые тут просто не хватит места, статья и без того длинная.

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

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

Ответы на сложные вопросы:

Источник: messagu.ru

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

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

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

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

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

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

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

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

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

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

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

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

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

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

using System; using System.Threading; using System.Threading.Tasks; using Telegram.Bot; using Telegram.Bot.Extensions.Polling; using Telegram.Bot.Types; using Telegram.Bot.Exceptions; namespace TelegramBotExperiments < class Program < static ITelegramBotClient bot = new TelegramBotClient(«TOKEN»); public static async Task HandleUpdateAsync(ITelegramBotClient botClient, Update update, CancellationToken cancellationToken) < // Некоторые действия Console.WriteLine(Newtonsoft.Json.JsonConvert.SerializeObject(update)); if(update.Type == Telegram.Bot.Types.Enums.UpdateType.Message) < var message = update.Message; if (message.Text.ToLower() == «/start») < await botClient.SendTextMessageAsync(message.Chat, «Добро пожаловать на борт, добрый путник!»); return; >await botClient.SendTextMessageAsync(message.Chat, «Привет-привет!!»); > > public static async Task HandleErrorAsync(ITelegramBotClient botClient, Exception exception, CancellationToken cancellationToken) < // Некоторые действия Console.WriteLine(Newtonsoft.Json.JsonConvert.SerializeObject(exception)); >static void Main(string[] args) < Console.WriteLine(«Запущен бот » + bot.GetMeAsync().Result.FirstName); var cts = new CancellationTokenSource(); var cancellationToken = cts.Token; var receiverOptions = new ReceiverOptions < AllowedUpdates = < >, // receive all update types >; bot.StartReceiving( HandleUpdateAsync, HandleErrorAsync, receiverOptions, cancellationToken ); Console.ReadLine(); > > >

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

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

Еще по теме:  Как из Телеграмм скопировать контакты в телефон

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

Но это материал для следующих видеороликов и статей. Если Вам интересно увидеть этот материал на YouTube канале или в статье, ставьте лайки, делитесь статьей с друзьями. При достижении 200 лайков и 20 комментариев я буду знать, что вам нравится данная тема и напишу продолжение.

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

Console.WriteLine(Newtonsoft.Json.JsonConvert.SerializeObject(update));

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

if (update.Type == Telegram.Bot.Types.Enums.UpdateType.Message) < var message = update.Message; if (message.Text.ToLower() == «/start») < await botClient.SendTextMessageAsync(message.Chat, «Добро пожаловать на борт, добрый путник!»); return; >await botClient.SendTextMessageAsync(message.Chat, «Здоров, братан! И тебе не хворать!»); >

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, «Здоров, братан! И тебе не хворать!»);

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

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

using System; using System.Threading; using System.Threading.Tasks; using Telegram.Bot; using Telegram.Bot.Extensions.Polling; using Telegram.Bot.Types; using Telegram.Bot.Exceptions; namespace TelegramBotExperiments < class Program < static ITelegramBotClient bot = new TelegramBotClient(«TOKEN»); public static async Task HandleUpdateAsync(ITelegramBotClient botClient, Update update, CancellationToken cancellationToken) < // Некоторые действия Console.WriteLine(Newtonsoft.Json.JsonConvert.SerializeObject(update)); if(update.Type == Telegram.Bot.Types.Enums.UpdateType.Message) < var message = update.Message; if (message.Text.ToLower() == «/start») < await botClient.SendTextMessageAsync(message.Chat, «Добро пожаловать на борт, добрый путник!»); return; >await botClient.SendTextMessageAsync(message.Chat, «Привет-привет!!»); > > public static async Task HandleErrorAsync(ITelegramBotClient botClient, Exception exception, CancellationToken cancellationToken) < // Некоторые действия Console.WriteLine(Newtonsoft.Json.JsonConvert.SerializeObject(exception)); >static void Main(string[] args) < Console.WriteLine(«Запущен бот » + bot.GetMeAsync().Result.FirstName); var cts = new CancellationTokenSource(); var cancellationToken = cts.Token; var receiverOptions = new ReceiverOptions < AllowedUpdates = < >, // receive all update types >; bot.StartReceiving( HandleUpdateAsync, HandleErrorAsync, receiverOptions, cancellationToken ); Console.ReadLine(); > > >

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

Заключение

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

Источник: romanov-blog.ru

Рейтинг
( Пока оценок нет )
Загрузка ...