Как при нажатии кнопки в боте телеграм, дать возможность пользователю ввести требуемые данные?
Помогите завершить код, пол дня убил на это, но так и не понял как реализовать то, что прописано в комментариях. Буду очень благодарен!
Хотя бы общей информацией поделитесь, или там просто наводки Всему рад, за всё благодарен
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)
Ответы (1 шт):
Автор решения: Violet
→ Ссылка
без оптимизаций:
@bot.message_handler(commands=['start'])
def start(message):
markup = types.InlineKeyboardMarkup()
key_1 = types.InlineKeyboardButton(text='Создать заказ', callback_data="order")
markup.add(key_1)
bot.send_message(message.chat.id, 'Пожелание', reply_markup=markup)
@bot.callback_query_handler(func=lambda call: True)
def handler(call):
if call.data == 'order':
msg = bot.send_message(call.message.chat.id, 'Введите название товара: ')
bot.register_next_step_handler(msg, product_name)
elif call.data == 'order_Yes':
save(order)
bot.answer_callback_query(call.id, 'Yes')
else:
print('else')
bot.answer_callback_query(call.id, 'else')
def product_name(message):
order.append(message.text)
sleep(1)
bot.delete_message(message.chat.id, message.message_id)
msg = bot.edit_message_text(chat_id=message.chat.id, message_id=message.message_id - 1,
text='Введите стоимость товара: ')
bot.register_next_step_handler(msg, product_price)
def product_price(message):
order.append(message.text)
sleep(1)
bot.delete_message(message.chat.id, message.message_id)
msg = bot.edit_message_text(chat_id=message.chat.id, message_id=message.message_id - 2,
text='Введите описание товара: ')
bot.register_next_step_handler(msg, product_description)
def product_description(message):
order.append(message.text)
sleep(1)
bot.delete_message(message.chat.id, message.message_id)
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)
bot.edit_message_text(chat_id=message.chat.id, message_id=message.message_id - 3,
text=f'Имя товара: {order[0]}\nСтоймость товара: {order[1]}\n'
f'Описание товара: {order[2]}\n\nСохранить позицию?', reply_markup=markup)
def save(order_list):
print(order_list)