Собственные обработчики для команд
На текущий момент можно создать собственные обработчики для update типа message и callbackQuery.
Примеры уже реализованных для message:
Reply - текстовые команды
ReplyDynamic - динамические текстовые команды
Slash - текстовые команды, которые используют перед текстом символ "/"
Пример для callbackQuery
InlineCallback - обработка inline кнопок.
В прошлых статьях рассказывалась как работать с командами. Именно эти обработчики отвечают, как правильно это работает под капотом.
Начиная с версии 0.7 есть возможность создать собственные обработчики. Ваши обработчики будут приоритетными над уже существующими.
Message
Для создания своего обработчика, нужно создать новый класс, который реализовывает интерфейс IMessageCommandHandler. В реализованном методе Handle вы можете реализовываете логику обработки данных. Если данные обработали, возвращаете результат UpdateResult.Handled, это укажет системе, что не требуется вызывать следующие обработчики.
public class MessageTestHandler : IMessageCommandHandler
{
public async Task<UpdateResult> Handle(PRBotBase bot, Update update, Message updateType)
{
/* Если данные пришли которые вам нужны и вы их обработали возращаем результат Handled.
* Это будет означать, то что действие выполнено и остальные обработчики будут пропущены. */
if (updateType.Text == "Нужные данные")
return UpdateResult.Handled;
// Команда не обработана, попытаемся обработать следующим обработчиком.
return UpdateResult.Continue;
}
}
При создание бота добавьте ваш новый обработчик:
var bot = new PRBotBuilder("Token")
.AddMessageCommandHandlers(new MessageTestHandler())
.Build();
После этого, когда придет update формата message, сначала будет выполнен ваш обработчик. Если ваш обработчик не сможет обработать данные и вернет результат UpdateResult.Continue, update попытается выполнить дефолтные обработчики в следующем порядке slash, reply, replydynamic.
CallbackQuery
Для создания своего обработчика, нужно создать новый класс, который реализовывает интерфейсICallbackQueryCommandHandler. В реализованном методе Handle вы можете реализовываете логику обработки данных. Если данные обработали, возвращаете результат UpdateResult.Handled, это укажет системе, что не требуется вызывать следующие обработчики.
public class CallbackQueryTestHandler : ICallbackQueryCommandHandler
{
public async Task<UpdateResult> Handle(PRBotBase bot, Update update, CallbackQuery updateType)
{
/* Если данные пришли которые вам нужны и вы их обработали возращаем результат Handled.
* Это будет означать, то что действие выполнено и остальные обработчики будут пропущены. */
if (updateType.Data == "Нужные данные")
return UpdateResult.Handled;
// Команда не обработана, попытаемся обработать следующим обработчиком.
return UpdateResult.Continue;
}
}
При создание бота добавьте ваш новый обработчик:
var bot = new PRBotBuilder("Token")
.AddCallbackQueryCommandHandlers(new CallbackQueryTestHandler())
.Build();
После этого, когда придет update формата callbackQuery, сначала будет выполнен ваш обработчик. Если ваш обработчик не сможет обработать данные и вернет результат UpdateResult.Continue, update попытается выполнить дефолтный обработчик inlineCallback.
Last updated