• Finite State Machine Python, как вызвать функцию с переменной state?

    Vindicar
    @Vindicar
    RTFM!
    У тебя проблема молотка.
    С 99% вероятностью тебе не нужно вызывать такие функции, они являются обработчиками событий и вызываются самим фреймворком aiogram. Если тебе нужно повторно использовать код в таком обработчике, вынеси его в отдельную функцию, которая не работает ни с состоянием, ни с событием.

    Допустим, у тебя есть код:
    @state_router.message(MyState.stateA)
    async def process_stateA(message: Message, state: FSMContext) -> None:
        data = await state.get_data()
        result = message.text + str(data['some_key'])  # это типа логика обработки
        await message.reply(result)

    Его надо будет отрефакторить так:

    def do_stuff(msgtext: str, some_value) -> str:
        return msgtext + str(some_value)
    
    @state_router.message(MyState.stateA)
    async def process_stateA(message: Message, state: FSMContext) -> None:
        data = await state.get_data()
        result = do_stuff(message.text, data['some_key'])
        await message.reply(result)

    И тогда ты сможешь при необходимости вызвать снова do_stuff(), не трогая process_stateA().
    Ответ написан
    1 комментарий