@bitkoljas

Как при нажатии кнопки в боте телеграм, дать возможность пользователю ввести требуемые данные?

Помогите завершить код, пол дня убил на это, но так и не понял как реализовать то, что прописано в комментариях. Буду очень благодарен!

import telebot
from telebot import types

TeleB = telebot.TeleBot('Token')

@TeleB.message_handler(commands=['start'])
def Start(Messages):

        markup = types.InlineKeyboardMarkup()
        key_1 = types.InlineKeyboardButton(text = 'Создать заказ', callback_data="Order")
        markup.add(key_1)

        TeleB.send_message(Messages.chat.id, 'Пожелание', reply_markup = markup)

@ExTorg.callback_query_handler(func=lambda call: True)
def Handler(CallBack):

    if CallBack.data == 'Order':

        Order = list()

        TeleB.send_message(CallBack.id, 'Введите название товара: ')

        ## Ожидаем отправку сообщения с именем товара от пользователя и заносим текст сообщения в список Order.append('Текст отправленного сообщения'), после чего удаляем сообщение отправленное пользователем, затем продолжаем выполнение кода

        TeleB.edit_message_text(chat_id = CallBack.id, message_id = CallBack.message.id, text = 'Введите стоймость товара: ')

        ## Ожидаем отправку сообщения со стоймостью товара от пользователя и заносим текст сообщения в список Order.append('Текст отправленного сообщения'), после чего удаляем сообщение отправленное пользователем, затем продолжаем выполнение кода

        TeleB.edit_message_text(chat_id = CallBack.id, message_id = CallBack.message.id, text = 'Введите описание товара: ')

        ## Ожидаем отправку сообщения с описанием товара от пользователя и заносим текст сообщения в список Order.append('Текст отправленного сообщения'), после чего удаляем сообщение отправленное пользователем, затем продолжаем выполнение кода

        Blank = f'Имя товара: {Order[0]}\nСтоймость товара: {Order[1]}\nОписание товара: {Order[2]}\n\nСохранить позицию?'

        markup = types.InlineKeyboardMarkup()
        key_1 = types.InlineKeyboardButton(text = 'Да', callback_data="Order_Yes")
        key_2 = types.InlineKeyboardButton(text = 'Нет', callback_data="Order_No")
        markup.add(key_1, key_2)

        TeleB.edit_message_text(chat_id = CallBack.id, message_id = CallBack.message.id, text = 'Введите название товара: ', reply_markup = markup)

        ## Ожидаем подтверждения. Если нажата кнопка 'Да', то переменная Order передаётся в функцию Save, иначе действие завершается без сохранения

def Save(Order):
    print(Order)
  • Вопрос задан
  • 352 просмотра
Решения вопроса 1
@rengated
Привет, если я правильно, взаимодействие происхохдит в форме диалога. Ты можешь использовать функцию Teleb.register_next_step_handler(message, "функция для обработки"). То есть при вводе следующего сообщения от пользователя оно идет в обработку функции, которая является аргументом. И все, дальше обрабатываешь, куда - нибудь записываешь и все должно быть хорошо.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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