Middleware
Middleware - это строительные блоки, которые оборачивают и расширяют основной обработчик update telegram бота. Каждый компонент middleware принимает botclient, update и делегирует его следующему компоненту в цепочке. Работает аналогично, как в ASP.NET. Обработка вызывается по цепочке перед update и после update.

InvokeOnPreUpdateAsync - вызывается до обработки update.
InvokeOnPostUpdateAsync - вызывается после обработки update.
Данные методы являются виртуальными, соответственно их можно переопределить.
Для работы с middleware используется базовый класс middlewarebase. Для создания своего обработчика нужно от наследоваться от базового класса и переопределить методы InvokeOnPreUpdateAsync и InvokeOnPostUpdateAsynс. Важно не забыть выполнить методы базового класса.
Пример
using PRTelegramBot.Core.Middlewares;
using Telegram.Bot;
using Telegram.Bot.Types;
namespace ConsoleExample.Middlewares
{
public class OneMiddleware : MiddlewareBase
{
public override async Task InvokeOnPreUpdateAsync(ITelegramBotClient botClient, Update update, Func<Task> next)
{
Console.WriteLine("Выполнение первого обработчика перед update");
await base.InvokeOnPreUpdateAsync(botClient, update, next);
}
public override Task InvokeOnPostUpdateAsync(ITelegramBotClient botClient, Update update)
{
Console.WriteLine("Выполнение первого обработчика после update");
return base.InvokeOnPostUpdatesAsync(botClient, update);
}
}
}
Подключение своих обработчиков при создание ботов.
var telegram = new PRBotBuilder("Token")
.SetBotId(0)
.AddConfigPath(ExampleConstants.BUTTONS_FILE_KEY, ".\\Configs\\buttons.json")
.AddConfigPath(ExampleConstants.MESSAGES_FILE_KEY, ".\\Configs\\messages.json")
.AddAdmin(1111111)
.SetClearUpdatesOnStart(true)
.AddReplyDynamicCommands(dynamicCommands)
.AddMiddlewares(new OneMiddleware(), new TwoMiddleware(), new ThreeMiddleware())
.Build();
Как видно из кода, первым идет OneMiddleWare, после TwoMiddleWare и в конце ThreeMiddleware. Обработка перед update будет выглядеть так:
OneMiddleWare
TwoMiddleWare
ThreeMiddleware
Обработка после update будет выглядеть так:
ThreeMiddleware
TwoMiddleWare
OneMiddleWare
Если потребуется, можно прервать выполнение цепочку использовал return;
Last updated