Аналог сцен из telegraf (js) в python

Потрогал NodeJS с разработкой ботов под телеграм.
Очень сильно понравились сцены. Они невероятно удобные.
Есть ли их аналог в python?
Вообще, ориентируюсь под aiogram, но если они есть в других либрах, то тоже буду рад узнать о них.

UPD 1:

Пример кода сцены:

on_welcome(){
        const _scene = new Scene('welcome')

        _scene.enter(async (ctx) => {
            await ctx.reply(core.msg['ru']['on_welcome'].format(name=ctx.from.username))
        })

        _scene.on('text', async (ctx) => {
            if (ctx.message.text) {
                //...
                _scene.leave();
            }else{
                //...
                _scene.reenter()
            }

        })
        //...
    }

То-есть, посылаем enter message, потом ставим listener на text и уже в хандлере мы можем либо запустить сцену заново из-за, допустим, некорректных данных, либо выйти со сцены.

Я очень долго бьюсь с этой проблемой в python и так и не нашел объективно простого и правильного решения.

В python у меня реализовано через events:

@dp.message_handler()
async def on_any(message: Message):
    user = get_user(message.from_user.id)  # Получаем юзера из БД
    event: Event = get_user_event(message.from_user.id)  # Получаем возможный event юзера
    if event:
        if event.type == 'get_access':
            if VK.is_token_valid(message.text):
                if user:
                    update_user_token(message.text, user)
                else:
                    add_user(User(token=message.text, tg_id=message.from_user.id))
                del_event(id=message.from_user.id)  # Аналог _scene.leave()
                await message.answer(text=msg['on_good_token'], reply_markup=collect_new_pack())
            else:
                await message.answer(text=msg['on_bad_token'])  
        elif event.type == 'await_sticker':
                # ...

То-есть, юзер нажал на кнопку регистрации и должен отправить токен, допустим.
Моя реализация говорит о том, что на юзера вешается event get_access.
И в общем хандлеере всех сообщений я прохожусь по всем возможным event'am.


Ответы (1 шт):

Автор решения: Sergei

В aiogram это реализовано через машину состояний

→ Ссылка