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