функция bot.register_next_step_handler() из TelagramBotAPI
Вроде чуть-чуть знаю библиотеку TelegramBotAPI, решил изучить aiogram, и сразу столкнулся с проблемой, что не знаю как сразу захватывать ответ пользователя после того как он ответил на вопрос бота. Так вот, в telebot за это отвечает функция
bot.register_next_step_handler()
А в aiogram есть функция с таким же действием? Нигде просто не смог найти.
Ответы (1 шт):
Я и сам недавно столкнулся с этим, после перехода на Aiogram3. Обычно здесь не пишут готовые решения, если не предложены попытки, но я сам сталкивался с недопониманием, поэтому вот.
Здесь совершенно другой подход к решению таких задач. Вместе указания следующей функции, здесь используется FSM (машина состояний), в которой отслеживается текущее состояние, можно динамически их переключать и перенаправлять.
Для сравнения, я Вам дам два идентичных по функционалу кода, но на двух библиотеках для наглядности:
Telebot:
@bot.message_handler(commands=['start'])
def test(message):
bot.send_message(message.chat.id, text='Пожалуйста, введите своё имя')
bot.register_next_step_handler(message, new_func)
def new_func(message):
name = message.text
bot.send_message(message.chat.id, text=f'{name} — какое красивое имя. Рад с Вами познакомится.')
Aiogram3:
import aiogram
from aiogram.filters import CommandStart, Command
from aiogram.types import Message
from aiogram.fsm.context import FSMContext
from aiogram.fsm.state import StatesGroup, State
class Form(StatesGroup):
name = State()
@dp.message(Command('start'))
async def test(message: Message, state: FSMContext):
await message.answer("Пожалуйста, введите своё имя")
await state.set_state(Form.name)
@dp.message(Form.name)
async def new_func(message: Message, state: FSMContext):
name = message.text
await message.answer(f"{name} — какое красивое имя. Рад с Вами познакомиться.")
await state.clear()
Таким образом, Вы можете заранее объявить все нужны состояния, а затем указывать на какой переключится и затем очистить состояния, чтобы выйти из этого.
Полезные ссылки: