Найти в Дзене
Работяги

Пишем и хостим Telegram бота, пока чай не успел остыть

Привет, я Никита Ковалевский, специалист группы сопровождения, представляю IT сообщество Работяги. В этом сообществе ты можешь поделиться своими проблемами в разработке и найти интересующие тебя вопросы из сферы IT. Спонсором сегодняшней статьи является Богдан и его идея: В данной статье мы немного отойдем от идеи бесконечного беспрерывного обучения и поднимем себе настроение написав небольшого telegram бота. Итак, приступим к написанию. Вся работа бота сводится к следующему алгоритму: 1)Сохранить идентификатор пользователя, который написал боту. 2)Через определенное время отправить пользователю сообщение с его именем и ссылкой на трек. Приступим. Создание любого бота начинается с диалога с другим ботом … которого зовут BotFather. Сразу небольшая ремарка, найти незанятое, хорошо звучащее название для вашего бота получится точно не с первого раза После того как мы получили токен можно приступить к написанию приложения. Бота писать мы будем на народном (в узко-широких кругах) C#. Для нач

Привет, я Никита Ковалевский, специалист группы сопровождения, представляю IT сообщество Работяги. В этом сообществе ты можешь поделиться своими проблемами в разработке и найти интересующие тебя вопросы из сферы IT.

Спонсором сегодняшней статьи является Богдан и его идея:

-2

В данной статье мы немного отойдем от идеи бесконечного беспрерывного обучения и поднимем себе настроение написав небольшого telegram бота.

Итак, приступим к написанию.

Вся работа бота сводится к следующему алгоритму:

1)Сохранить идентификатор пользователя, который написал боту.

2)Через определенное время отправить пользователю сообщение с его именем и ссылкой на трек.

Приступим.

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

-3

После того как мы получили токен можно приступить к написанию приложения.

Бота писать мы будем на народном (в узко-широких кругах) C#.

Для начала через NuGet установим необходимую библиотеку для работы с API telegram.

-4

Затем подключим необходимые пространства имен, с которыми будем работать:

Коротко о подключаемых                                                                                                                          •      Microsoft.Extensions.DependencyInjection: Зависимости и службы.
•      Microsoft.Extensions.Hosting: Хостинг для фоновых задач.
•      Telegram.Bot и Telegram.Bot.Types: API для работы с Telegram Bot.
•      Telegram.Bot.Extensions.Polling: Расширения для получения обновлений.
•      Telegram.Bot.Types.Enums: Перечисления, такие как типы сообщений.
Коротко о подключаемых • Microsoft.Extensions.DependencyInjection: Зависимости и службы. • Microsoft.Extensions.Hosting: Хостинг для фоновых задач. • Telegram.Bot и Telegram.Bot.Types: API для работы с Telegram Bot. • Telegram.Bot.Extensions.Polling: Расширения для получения обновлений. • Telegram.Bot.Types.Enums: Перечисления, такие как типы сообщений.

Затем в основном классе программы объявим следующие переменные

•	BotToken: Токен вашего Telegram-бота.                                                                                            •	ChatIds: Словарь <id пользователя, никнейм пользователя>
•	_botClient: Клиент для работы с Telegram Bot API.
• BotToken: Токен вашего Telegram-бота. • ChatIds: Словарь <id пользователя, никнейм пользователя> • _botClient: Клиент для работы с Telegram Bot API.
-7

В методе Main инициализируем переменную для работы с API, после чего настроим фоновый сервис TimedHostedService (который мы объявим позже), который будет отвечать за выполнение действий через определенные промежутки времени.

Также в этом методе мы настроим получение обновление и запустим получение обновлений, передав в метод StartReceiving 3 параметра: обработчик для обновлений, обработчик для ошибок (в нашем случае это заглушка…), переменную с типами обрабатываемых событий

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

-8

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

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

-9

С разработкой закончили, осталось захостить бота. Рассмотрим хостинг бота на примере сервера с операционной системой centOS 7. Еще одна ремарка, в данной статье мы не будем рассматривать и анализировать хостинги, единственное что могу сделать, так это вольно процитировать фразу одного из мудрецов (Дмитрия Канаева): "хостинг личного сервера, по деньгам, должен выходить как небольшая пивная посиделка".

Лирическое отступление закончено, продолжим.

Для начала нам необходимо собрать приложение:

dotnet publish -c Release -o publish
dotnet publish -c Release -o publish

и затем перенести его на наш сервер.

После чего установим sdk

sudo yum install dotnet-sdk-6.0

и саму среду выполнения

sudo yum install dotnet-sdk-6.0

После чего остается только запустить нашего бота

-11

Остается только проверить что все завелось и правильно работает

-12

Очередная вымышленная задача решана, настроение поднято и за время написания бота чай даже почти не остыл)

Ссылки на наши ресурсы – ниже:

https://discord.gg/dWMKzXyG

https://t.me/podcust_rabot9g

https://www.youtube.com/@Rabot9gi

https://vk.com/club224443714