@markfrol

Как сделать, чтобы message.text смотрел на только что введеный, а не старый текст?

Скриншот фрагмента кода удалён модератором.
Стокнулся с проблемой, что бот считывает старые сообщения. Приложу фото поведения бота. Смысл в том, что бот запрашивал подтверждения каждый раз перед взятием.
@bot.message_handler(state=MyStates.take_all_product, content_types="text")
async def take_all_product(message):
chat_data = bot.chat_data_map[message.from_user.id]
if message.text == 'Подтвердить':
result = False
for element in chat_data.cells_products_data:
chat_data.cell_conf_rack, chat_data.cell_conf_span, chat_data.cell_conf_row, chat_data.cell_conf_cell = [int(i) for i in element["cell"].split("-")]
await bot.send_message(message.from_user.id,
f"Подвердите взятие из ячейки:\n\n"
f"{element['cell']} - {element['count']} ",
reply_markup=confirm_no_cancel_markup)
if message.text == 'Подтвердить':
chat_data = bot.chat_data_map[message.from_user.id]
cell_result, cell_data = await cells.get_one_by_params(span=chat_data.cell_conf_span, rack=chat_data.cell_conf_rack, row=chat_data.cell_conf_row, number=chat_data.cell_conf_cell)
if cell_result and cell_data:
result = await cells_products.delete_by_params(product_uuid=chat_data.product_obj.uuid, cell_uuid=cell_data.uuid)
if result:
await bot.send_message(message.from_user.id,
f"Взято {element['cell']} - {element['count']}\n\n",
reply_markup=empty_markup)
else:
await bot.send_message(message.from_user.id, f'Не удалось взять товар\n\n', reply_markup=empty_markup)
await bot.set_state(message.from_user.id, MyStates.find_product, message.chat.id)
65528a28958c6665131551.png
  • Вопрос задан
  • 40 просмотров
Пригласить эксперта
Ответы на вопрос 1
@twistfire92
Python backend developer
Объект message у вас один всегда, который берется из аргументов функции. Вы его нигде не меняете, поэтому при проверке if message.text == 'Подтвердить': всегда вернется одно и то же значение.
Если вы хотите ожидать от пользователя нового ввода, стоит перекинуть управление в другую функцию.
Конкретно в вашем случае лучше воспользоваться register_next_step_handler. И каждый раз прокидывать в него оставшиеся элементы списка из cells_products_data.
Я не уверен, что register_next_step_handler работает в асинхронном режиме, не юзал telebot в async.
Изучите этот инструмент подробнее.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы