@i_ikigai

Как в aiogram получить текст последнего сообщения или по ID?

Хочу понять как получать данные от пользователя на примере обработки выражений
есть кнопка
@dp.message_handler()
async def process_command_1(message: types.Message):
    if message.text == 'Математические операции':
        await message.answer("Напишите выражение и нажмите кнопку", reply_markup=kb.inline_kb)

inline_res = InlineKeyboardButton('Рассчитать', callback_data='res')

Обработка нажатия
@dp.callback_query_handler(lambda c: c.data == 'res')
async def process_callback_button1(callback_query: types.CallbackQuery):
    await bot.answer_callback_query(callback_query.id)
    await bot.send_message(callback_query.from_user.id, f'{callback_query.message.text}')

Получает текст "Напишите выражение и нажмите кнопку", хотелось бы вместо него получить текст от пользователя и для примера просто обработать его через eval, но не могу понять как обработать следующее сообщение а не текущее
  • Вопрос задан
  • 28065 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Pavlks
Тут уже нужно с сотояниями работать. States - по-английски. Я здесь научился ссылка

from aiogram.dispatcher.filters.state import State, StatesGroup

class Mydialog(StatesGroup):
    otvet = State()  # Will be represented in storage as 'Mydialog:otvet'

#Здесь мы начинаем общение с клиентом и включаем состояния
@dp.message_handler()
async def cmd_dialog(message: types.Message):
    await Mydialog.otvet.set()  # вот мы указали начало работы состояний (states)

    await message.reply("Человечишка, напиши мне свое жалкое мнение")

# А здесь получаем ответ, указывая состояние и передавая сообщение пользователя
@dp.message_handler(state=Mydialog.otvet)
async def process_message(message: types.Message, state: FSMContext):

    async with state.proxy() as data:
        data['text'] = message.text
        user_message = data['text']

        # дальше ты обрабатываешь сообщение, ведешь рассчеты и выдаешь ему ответ.
       otvet_klienty = 'bla, bla, bla'

        await bot.send_message(
            message.from_user.id,
            otvet_klienty ,
            reply_markup=markup,
            parse_mode='HTML',
        )

    # Finish conversation
    await state.finish()  # закончили работать с сотояниями
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы