TelegramBotiSharp — это библиотека, дополняющая стандартную библиотеку Telegram.Bot для создания телеграм-ботов на C#. Используя эту небольшую библиотеку, вы получите удобные инструменты для разработки более сложных телеграм-ботов.
- Нет необходимости проверять тип обновления — больше не нужно вручную проверять типы обновлений, так как существуют специальные классы-обработчики для каждого типа обновления.
- Информация о пользователе теперь в одном месте — вам не нужно вручную извлекать данные пользователя из обновления, он уже находится в классе
TelegramContext. - Добавлено хранилище данных пользователя — теперь можно сохранять состояние и данные пользователя.
- Добавлены фильтры — вы можете создавать обработчики одного типа обновлений для различных сценариев.
- Отклонировать репозиторий.
- Скачать zip-архив репозитория.
- Использовать NuGet по ссылке: https://gitlab.com/api/v4/projects/60794766/packages/nuget/index.json.
Для использования NuGet, добавьте в проект файл nuget.config со следующим содержимым:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<add key="TelegramBotiSharp" value="https://gitlab.com/api/v4/projects/60794766/packages/nuget/index.json" />
</packageSources>
</configuration>Заполните файл Program.cs следующим кодом:
// Замените "TOKEN" на реальный токен вашего бота
ITelegramBotClient botClient = new TelegramBotClient("TOKEN");
// Запускаем бота, передав в метод экземпляр класса UpdateHandler с вашими обработчиками
await botClient.StartReceivingAsync(new UpdateHandler([new CommandHandler()]));
// Класс обработчика сообщений с фильтром команды
internal class CommandHandler : MessageHandler
{
[CommandFilter("start")]
public override Task HandleAsync(TelegramContext context)
{
Console.WriteLine(context.Data);
return Task.CompletedTask;
}
}internal class StartCommandHandler : MessageHandler
{
[CommandFilter("start")]
public override async Task HandleAsync(TelegramContext context)
{
await context.BotClient.SendTextMessageAsync(context.UserId, "Hello, World!");
}
}В этом примере обработчик StartCommandHandler будет срабатывать, когда пользователь отправит команду "/start".
Основные обработчики:
CallbackQueryHandler— для обработкиTelegram.Bot.Types.CallbackQuery;MessageHandler— для обработкиTelegram.Bot.Types.Message.
Остальные обработчики можно найти в папке проекта TelegramBotiSharp\Handling\Handlers.
Пример выше использует фильтр-атрибут CommandFilter("start"), который сработает, если пользователь отправит сообщение-команду "/start".
Фильтры можно использовать одновременно для создания более сложной логики:
internal class ExempleHandler : CallbackQueryHandler
{
[StateFilter("state_proccess")]
[DataFilter("Далее")]
public override async Task HandleAsync(TelegramContext context)
{
// Ваш код
}
}В этом примере обработчик сработает, если состояние пользователя — "state_proccess", и пользователь нажал на кнопку с данными "Далее".
Основные фильтры
CommandFilter— сообщение является командой.StateFilter— состояние пользователя.DataFilter— данные, отправленные пользователем.
Все фильтры данной библиотеке находятся в пространстве имен TelegramBotiSharp.Filters
Чтобы создать собственный фильтр, создайте класс, наследующий от FilterAttribute, и реализуйте его:
internal class ExempleFilter(string? data) : FilterAttribute
{
public override async Task<bool> CallAsync(TelegramContext context)
{
// Ваш код
}
}Данная библиотека предоставляет новый тип данных ParallelUpdateReceiver, определенный в пространстве имен TelegramBotiSharp.Handling.Polling.
Данный тип обрабатывает обновления Telegram.Bot.Types.Update параллельно, а не последовательно, тем самым увеличивается скорость обработки.
Недостатком является то, что обработка становится недетерминированной, и в некоторых случаях это может приводить к разному порядку вывода сообщений.
Всё очень просто! Передайте в метод StartReceivingAsync экземпляр класса ParallelUpdateReceiver, как показано в следующем примере:
await botClient.StartReceivingAsync(updateHandler, new ParallelUpdateReceiver(botClient));