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()
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ónif-else
en el estado anteriorLowPrice.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ónstate.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.