Waiter Machine
Waiter Machine для создания быстрых воронок без потери скоупа.
Таким образом с его помощью можно реализовать быстрые стейты и написать простейшие воронки.
В отличии от State Dispenser, состояния никуда не сериализуются, поэтому Waiter Machine не следует использовать для сложных стейтов, где важна консистентность проведения например транзакции или они активны долгое время.
Простейший пример с waiter machine:
Из .wait
возвращается tuple с двумя элементами:
- Объект события которое разрешило ожидание (в примере выше,
Message
) - Контекст который был сформирован в ходе обработки события
Поэтому его можно сразу раскрыть в две переменные.
В .wait
можно так же передать правила, и default_behaviour
как именованный аргумент.
default_behaviour
может принимать Callable, куда придет событие, либо любой другой объект который будет передан в return manager привязаный к активному view и обработан, в примере выше это строка, которая будет отправлена как сообщение, в соответствии с имплементацией в return manager для view сообщений ботов.
expiration
принимает timedelta или int (в секундах) для того чтобы ограничить время ожидания, если ивент придет позже чем start_ts + expiration, то будет вызван drop и ивент будет обработан в обычном view
Метод .drop
используется чтобы сбросить ожидание ивента по идентификатору.