Не работает кнопка назад, машина состояний обновляется, но хендлеры заново не вызываются. Подскажите, как можно исправить
@dp.callback_query_handler(state="*", text="Назад")
async def back(call: CallbackQuery, state: FSMContext):
await Application.previous()
@dp.message_handler(Command("start"))
async def show_greeting(message: Message):
text = message.from_user.first_name + "," + open("texts/ru/Приветствие.txt", "r").read()
await message.answer(text, reply_markup=choice_target)
await Application.target.set()
@dp.callback_query_handler(state=Application.target)
async def choice(call: CallbackQuery, state: FSMContext):
text = call.from_user.first_name + "," + open("texts/ru/Недвижимость.txt", "r").read()
await call.message.edit_text(text, reply_markup=choice_country)
async with state.proxy() as data:
data['target'] = call.data
await Application.country.set()
@dp.callback_query_handler(state=Application.country)
async def choice(call: CallbackQuery, state: FSMContext):
text = call.from_user.first_name + "," + open("texts/ru/Турция.txt", "r").read()
await call.message.edit_text(text, reply_markup=choice_time)
async with state.proxy() as data:
data['country'] = call.data
await Application.visitPlan.set()
@dp.callback_query_handler(state=Application.visitPlan)
async def choice(call: CallbackQuery, state: FSMContext):
text = call.from_user.first_name + "," + open("texts/ru/Варианты оплаты.txt", "r").read()
await call.message.edit_text(text, reply_markup=choice_form_deal)
async with state.proxy() as data:
data["visitPlan"] = call.data
await state.finish()
Ответы (2 шт):
Автор решения: Bellisa
→ Ссылка
await Application.target.set()
Присваивается только первому хэндлеру, так как текущее состояние None, далее же просто идет переход на следующее состояние:
await Application.next()
Хэндлеры не вызываются заново из-за того, что Вы переходите на прошлое состояние previous, но машина не может опять пойти дальше без next
Автор решения: Владимир Клятченко
→ Ссылка
@dp.callback_query_handler(state="*", text="Назад")
async def back(call: CallbackQuery, state: FSMContext):
await Application.previous()
@dp.message_handler(Command("start"))
async def show_greeting(message: [Message, CallbackQuery], state=None):
text = message.from_user.first_name + "," + open("texts/ru/Приветствие.txt", "r").read()
if type(message) == Message:
await message.answer(text, reply_markup=choice_target)
else:
await message.message.edit_text(text, reply_markup=choice_target)
await Application.target.set()
@dp.callback_query_handler(state=Application.target)
async def choice1(call: CallbackQuery, state: FSMContext):
text = call.from_user.first_name + "," + open("texts/ru/Недвижимость.txt", "r").read()
async with state.proxy() as data:
data['Цель'] = call.data
await Application.next()
await call.message.edit_text(text, reply_markup=choice_country)
@dp.callback_query_handler(state=Application.country)
async def choice2(call: CallbackQuery, state: FSMContext):
text = call.from_user.first_name + "," + open("texts/ru/Турция.txt", "r").read()
await call.message.edit_text(text, reply_markup=choice_time)
async with state.proxy() as data:
data['Страна'] = call.data
await Application.next()
@dp.callback_query_handler(state=Application.visitPlan)
async def choice3(call: CallbackQuery, state: FSMContext):
text = call.from_user.first_name + "," + open("texts/ru/Варианты оплаты.txt", "r").read()
await call.message.edit_text(text, reply_markup=choice_form_deal)
async with state.proxy() as data:
data["Когда посетит"] = call.data
data = await state.get_data()
await state.finish()