Как остановить FSM в aiogram3.0.0b7?
Я изучаю aiogram 3 b7 и столкнулся с проблемой, что не знаю как остановить состояние FSM. я видел решение использовать await state.finish(), но на 3 aiogram оно не работает. как мне сделать это? Код:
cansel = Router()
@cansel.message(Text(text=["❌ отмена"], ignore_case=True))
async def cmd_cansel(message: types.Message, state: FSMContext):
Ответы (3 шт):
Автор решения: TFader
→ Ссылка
Я нашёл решение, но не уверен лучшее ли оно. Решение:
await state.set_state(None)
Автор решения: hasker2
→ Ссылка
await state.clear()
убирает текущее состояние (стоит заметить что update_data которая там храниться, если вы ее добавили пропадет)
Автор решения: QWERTYZ PB
→ Ссылка
from aiogram.filters import Command
from aiogram import F, Router
router : Router = Router() # твой роутер
@router.message(Command("cancel")) # Сработает при команде /cancel
@router.message(F.text.casefold() == "cancel") # И если в сообщение есть "cancel"
async def cancel_handler(message: Message, state: FSMContext) -> None:
current_state = await state.get_state() # Получаем текущий state
if current_state is None: # Если его нет, то ничего не возвращаем
return
'''А вот иначе, завершаем state и прописываем в лог'''
lg.info("Cancelling state %r", current_state)
await state.clear()
await message.answer("Вы отменили действие")