Не так давно Роскомнадзор(РКН) объявил о снятии блокировок серверов Telegram. Конечно это замечательная новость, ведь блокировка хоть и не была полноценной, но приосила массу трудностей для создания и последующего хостинга ботов разработчиками.
Мне стало интересно как написать своего собственного бота и разместить его на нашем хостинге, чтобы бот работал даже после того как ноутбук будет выключен.
Итак, вооружимся инструментарием, и приступим.
Создадим проект
Любая программа, включая бота, начинается с создания проекта. В нашем случае будет использован последний на момент написания статьи .net core sdk 3.1
Необходимо иметь установленной версию не ниже 3.1, т.к. в коде используюстя новые функции языка.
Всю работу мы будем проводить в консоли, поэтому открываем терминал с помощью удобного Вам способа. Если у Вас 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, перейдя по ссылке вы можете более детально ознакомится с решением.
Получаем токен бота
Первое, что нужно сделать — это зарегистрировать своего бота и получить токен для доступа к API. Сделать это очень просто с помощью официального бота @botfather перейдя по ссылке
Бота создали, токен получили, можно писать код!
Код
Код нужно скопировать и заменить в файл Program.cs:
Здесь представлен весь код нашего телеграм бота. Задача бота проста - отвечать на каждое сообщение добавив в принятое сообщение слово Received. Так выглядит метод для обработки сообщения:
ссылка на фрагмент кода в GitHub
Куда же вставлять полученый токен? Нужно заменить значение статической переменной в начале программы. Все что находится в кавычках заменить на полученый от @botfather токен. Переменная находится на 13 строчке:
static string BOT_TOKEN = "%BOT_TOKEN%";
Запускаем!
Основная работа сделана. Для того чтобы запустить бота нужно снова перейти в консоль, попасть в папку с проектом, и запустить написанную программу командой:
> dotnet run
После чего переходим к созданому боту и отправляем любое сообщение.
Хостим бота
Бот готов. После того как мы остановим работу программы, бот перестанет отвечать на сообщения( Держать включенным компьютер можно, но не удобно. Чтобы решить эту проблему, воспользуемся нашим хостингом.
Хостинг deploy-f решает на самом деле сразу несколько сложных задач.
Первое. Делает так, чтобы даже если ваше приложение по какой-либо причине завершило свою работу, снова его поднимет. Это удобно когда происходит ошибка, и приложение не обработав ее сразу же завершает выполнение. Или например если не пользоватся хостингом, а запускать на VPS, то нужно настроить автоматический старт приложения если виртуальный сервер перезагрузился, что редко, но обычно бывает в самый не подходящий момент.
Второе. Подготавливает специальные "образы" из загруженого вами уже собраного приложения. Это снимает кучу проблем по настройке других хостингов, где нужно знать о многих тонких моментах. Все что от вас нужно будет - это собрать приложение по инструкции которую мы подготовили в виде статьи:
Приступим к подготовке к публикации написаное приложение!
Снова переходим к консоль и собираем приложение для того чтобы получить запускаемое приложение, которое не требует установки sdk:
> dotnet publish -c Release -o publish
Отлично, теперь у нас появилась папка publish, содержимое которой(обязательно содержимое) нужно заархивироваь в zip архив. Будьте осторожны, некоторые архиваторы генерируют архивы не подходящего формата. Мы советуем использовать архиватор 7zip
Создаем приложение из архива
Архив готов, переходим в консоль deploy-f
Нам нужно создать приложение нажав на кнопку "Запустить из архива":
Далее выбираем созданый архив по кнопке загрузить:
После загрузки архива происходит автоматический переход на следующий шаг, где нужно выбрать нужный вариан который предлагает нам сервис после анализа архива:
Нас интересует соответственно первый вариант с .net core.
После выбора варианта на следующем шаге будет происходит сборка "образа", за логами которой вы можете следить в окне терминала
После успешной сборки, сервис попросит назвать создаваемое приложение.
Отлично, т.к. наш бот не использует WebHook для получение оповещаний по новым сообщениям в телеграм, то шаг с портами можем проигнорировать нажав на соответствующую кнопку "далее"
Приложение готово для запуска! Переходим на приложение через соответствующую кнопку, и нажимаем заветную кнопку "Запустить"
После нескольких секунд(может нескольких минут) мы получим вот такую картину, где зеленая галочка говорит нам что наше приложение запущено!
Переходим в телеграм, открываем чат с Вашим ботом и проверяем!https://blog.deploy-f.com/content/images/size/w2000/2020/06/ezgif.com-webp-to-png.png