> For the complete documentation index, see [llms.txt](https://prethink.gitbook.io/prtelegrambot/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://prethink.gitbook.io/prtelegrambot/ru/fishki-poleznye-praktiki/obrabotka-do-i-posle-update.md).

# Обработка до и после update

## OnPreUpdate - событие до всех update

Бывают ситуации, когда перед обработкой входящего сообщения или любого другого обновления требуется выполнить дополнительную логику. Например, проверить, зарегистрирован ли пользователь. Если пользователь не зарегистрирован — можно сразу отправить его на регистрацию и при необходимости прервать дальнейшую обработку текущего update.\
Для таких случаев предусмотрено событие `OnPreUpdate`: оно вызывается перед основным пайплайном обработки и позволяет выполнить свою логику, а также — при необходимости — остановить дальнейшую обработку.

Пример:

```csharp
// Создание бота
var telegram = new PRBotBuilder("Token").SetBotId(0).Build();
// Подписка на событие.
telegram.Events.UpdateEvents.OnPreUpdate += Handler_OnUpdate;
// Метод обработки события.
async Task<UpdateResult> Handler_OnUpdate(BotEventArgs e)
{
    /*
     Для примера можно рассмотреть зарегистрирован ли пользователь или нет.
        Если зарегистрирован
            return UpdateResult.Continue; - данный результат позволит продолжить обработку.
        Если не зарегистрирован то вызвать метод регистрации
            RegisterMethod();
            return UpdateResult.Stop или return UpdateResult.Handled - позволит прервать текущую обработку и отправить пользователя на регистрацию
     */
    return UpdateResult.Continue;
}
```

## OnPostUpdate - событие после всех update

Иногда необходимо выполнить некоторую логику после обработки любого действия пользователя. Например, сохранить дату и время последней активности пользователя.\
Для этого можно использовать событие `OnPostUpdate`: оно вызывается после завершения всей основной обработки update и позволяет выполнить дополнительные действия, не влияя на основной пайплайн.

```csharp
// Создание бота
var telegram = new PRBotBuilder("Token").SetBotId(0).Build();
// Подписка на событие.
telegram.Events.UpdateEvents.OnPostUpdate += Handler_OnPostUpdate;
// Метод обработки события.
async Task Handler_OnPostUpdate(BotEventArgs e)
{
    // Пример. Регистрация последней активности пользователя в боте. Допустим дата и время
}
```
