B
B
bitkoljas2021-10-10 20:50:41
Python
bitkoljas, 2021-10-10 20:50:41

How, when pressing a button in a telegram bot, allow the user to enter the required data?

Help me complete the code, I spent half a day on this, but did not understand how to implement what is written in the comments. I will be very grateful!

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)

Answer the question

In order to leave comments, you need to log in

1 answer(s)
R
rengated, 2021-10-11
@bitkoljas

Hello, if I'm correct, the interaction will take the form of a dialogue. You can use the function Teleb.register_next_step_handler(message, "function to handle"). That is, when you enter the next message from the user, it goes to the processing of the function that is the argument. And that's it, then you process it, write it down somewhere and everything should be fine.

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question