Разработка и хостинг собственного Telegram бота на языке C#

Getting Started июнь 23, 2020

Не так давно Роскомнадзор(РКН) объявил о снятии блокировок серверов Telegram. Конечно это замечательная новость, ведь блокировка хоть и не была полноценной, но приосила массу трудностей для создания и последующего хостинга ботов разработчиками.

Мне стало интересно как написать своего собственного бота и разместить его на нашем хостинге, чтобы бот работал даже после того как ноутбук будет выключен.

Итак, вооружимся инструментарием, и приступим.

Создадим проект

Любая программа, включая бота, начинается с создания проекта. В нашем случае будет использован последний на момент написания статьи .net core sdk 3.1

Необходимо иметь установленной версию не ниже 3.1,  т.к. в коде используюстя новые функции языка C#.

Всю работу мы будем проводить в консоли, поэтому открываем терминал с помощью удобного Вам способа. Если у Вас Windows то советую открыть класический cmd.

Для создания проекта выполним команду и укажем имя нового проекта simple-tg-bot:

> dotnet new console -o simple-tg-bot

Отлично! Переходим в папку с созданым проектом,  и снова открываем терминал. На этот раз нужно добавить пакеты которые позволят удобно работать с api телеграма.

> dotnet add package Telegram.Bot
> dotnet add package Telegram.Bot.Extensions.Polling

Добавленые пакеты - проект Telegram.Bot, на сегодняшний день это самое удобное api на C#, перейдя по ссылке вы можете более детально ознакомится с решением.

TelegramBots/Telegram.Bot
.NET Client for Telegram Bot API. Contribute to TelegramBots/Telegram.Bot development by creating an account on GitHub.

Получаем токен бота

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

BotFather
BotFather is the one bot to rule them all. Use it to create new bot accounts and manage your existing bots.

Бота создали, токен получили, можно писать код!

Код

Код нужно скопировать и заменить в файл Program.cs:

Здесь представлен весь код нашего телеграм бота. Задача бота проста - отвечать на каждое сообщение добавив в принятое сообщение слово Received. Так выглядит метод для обработки сообщения:

Куда же вставлять полученый токен? Нужно заменить значение статической переменной в начале программы. Все что находится в кавычках заменить на полученый от @botfather токен. Переменная находится на 13 строчке:

static string BOT_TOKEN = "%BOT_TOKEN%";

Запускаем!

Основная работа сделана. Для того чтобы запустить бота нужно снова перейти в консоль, попасть в папку с проектом, и запустить написанную программу командой:

> dotnet run

После чего переходим к созданому боту и отправляем любое сообщение.

Хостим бота

Бот готов. После того как мы остановим работу программы, бот перестанет отвечать на сообщения( Держать включенным компьютер можно, но не удобно. Чтобы решить эту проблему, воспользуемся нашим хостингом.

Хостинг deploy-f решает на самом деле сразу несколько сложных задач.

Первое. Делает так, чтобы даже если ваше приложение по какой-либо причине завершило свою работу,  снова его поднимет. Это удобно когда происходит ошибка, и приложение не обработав ее сразу же завершает выполнение. Или например если не пользоватся хостингом, а запускать на VPS, то нужно настроить автоматический старт приложения если виртуальный сервер перезагрузился, что редко, но обычно бывает в самый не подходящий момент.

Второе. Подготавливает специальные "образы" из загруженого вами уже собраного приложения. Это снимает кучу проблем по настройке других хостингов, где нужно знать о многих тонких моментах. Все что от вас нужно будет - это собрать приложение по инструкции которую мы подготовили в виде статьи:

Публикация .net core приложений
1. Сборка приложения Для сборки выполните команду: dotnet publish -c Release -o publish 2. Упаковка сборки в архив Добавьте в zip архив содержимое папки publish 3. Загрузка архива Загрузите архив через консоль deploy-f и следуйте инструкции 4. Настройка Добавьте нужные порты (которые открывает …

Приступим к подготовке к публикации написаное приложение!

Снова переходим к консоль и собираем приложение для того чтобы получить запускаемое приложение, которое не требует установки sdk:

> dotnet publish -c Release -o publish

Отлично, теперь у нас появилась папка publish, содержимое которой(обязательно содержимое) нужно заархивироваь в zip архив. Будьте осторожны, некоторые архиваторы генерируют архивы не подходящего формата. Мы советуем использовать архиватор 7zip

7-Zip
Архиватор 7zip

Создаем приложение из архива

Архив готов, переходим в консоль deploy-f

Консоль - deploy-f

Нам нужно создать приложение нажав на кнопку "Запустить из архива":

Кнопка "Запустить из архива" в консоли deploy-f

Далее выбираем созданый архив по кнопке загрузить:

Кнопка загрузки архива

После загрузки архива происходит автоматический переход на следующий шаг, где нужно выбрать нужный вариан который предлагает нам сервис после анализа архива:

Нас интересует соответственно первый вариант с .net core.

После выбора варианта на следующем шаге будет происходит сборка "образа", за логами которой вы можете следить в окне терминала

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

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

Приложение готово для запуска! Переходим на приложение через соответствующую кнопку, и нажимаем заветную кнопку "Запустить"

После нескольких секунд(может нескольких минут) мы получим вот такую картину, где зеленая галочка говорит нам что наше приложение запущено!

Переходим в телеграм, открываем чат с Вашим ботом и проверяем!

Stanislav Petrov

Администратор Deploy-f

Great! You've successfully subscribed.
Great! Next, complete checkout for full access.
Welcome back! You've successfully signed in.
Success! Your account is fully activated, you now have access to all content.