@temjiu

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

Какие есть пути пути реализации вызова функции с переменными (message: Message, state: FSMContext)?

P.S Если, что передавать в message - понятно, то со statе ’oм нет, перепробовал много способов, но все тщетно.
Aiogram 3x.
  • Вопрос задан
  • 93 просмотра
Решения вопроса 1
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().
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы