es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

no pasa al siguiente estado en FSM, Aiogram

¿Por qué no se mueve al último estado (resultado_sin_foto)? por ejemplo, si uso print en cada manejador, se imprime excepto en el último.

Por supuesto, no puedo moverme al último estado y escribir esta función en el estado actual, pero este código simplificado, solo como ejemplo, tiene más líneas, por eso quiero usar un estado separado, solo para hacer el código más legible.

Mis manejadores:

@dp.message_handler(Command("lowprice"))
async def choose_city(message: types.Message):
    await message.answer('Escribe la ciudad')
    await LowPrice.city.set()


@dp.message_handler(state=LowPrice.city)
async def hotels_quantity(message: types.Message, state: FSMContext):
    answer = message.text
    await state.update_data(city=answer)
    await message.answer('¿Cuántos hoteles debo mostrarte?')
    await LowPrice.quantity_hotels.set()


@dp.message_handler(state=LowPrice.quantity_hotels)
async def if_need_photo(message: types.Message, state: FSMContext):
    answer = message.text
    await state.update_data(quantity_hotels=answer)
    await message.answer('¿Necesito mostrarte fotos de los hoteles?')
    await LowPrice.photo.set()


@dp.message_handler(state=LowPrice.photo)
async def get_answer_about_photo(message: types.Message, state: FSMContext):
    answer = message.text
    await state.update_data(if_photo_need=answer)
    if answer == 'Sí':
        await message.answer('¿Cuántas fotos mostrar?')
        await LowPrice.quantity_photo.set()
    elif answer == 'No':
        await message.answer('Bien, estoy empezando a buscar hoteles')
        await LowPrice.result_without_photo.set()


@dp.message_handler(state=LowPrice.result_without_photo)
async def result_without_photo(message: types.Message, state: FSMContext):
    data = await state.get_data()
    city_id = get_id_city(data)
    await message.answer(f'ID de la ciudad: {city_id}')

Mis estados:

class LowPrice(StatesGroup):
    start = State()
    city = State()
    date = State()
    quantity_hotels = State()
    photo = State()
    result_without_photo = State()
    quantity_photo = State()
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Es posible que el último estado LowPrice.result_without_photo no se esté activando porque podría haber algún problema con la condición if-else en el estado anterior LowPrice.photo. Si la respuesta a la pregunta “¿Necesito mostrarle las fotos del hotel?” es cualquier cosa diferente a “Sí” o “No”, no activará el siguiente estado, que puede incluir el último.

    Por lo tanto, asegúrese de que las opciones de respuesta dadas en la condición if-else sean correctas y cubran todos los escenarios posibles. Además, revise los registros en busca de errores o excepciones que puedan estar impidiendo que se active el estado.

    También vale la pena mencionar que puede usar el parámetro next_state en la función state.set() para moverse directamente al estado final en lugar de pasar por todos los estados intermedios. Sin embargo, esto puede no ser útil si necesita actualizar algunos datos en los estados intermedios antes de pasar al estado final.

Comments are closed.