Как работать с register_next_step_handler
Надо чтобы при нажатии на кнопку "пополнить баланс" пользователю выходило сообщение на какую сумму он хочет пополнить и после его ввода выводилась снова клавиатура.
Вот часть кода
@bot.message_handler(commands=['start'])
def any_msg(message):
keyboard = types.InlineKeyboardMarkup(row_width=1)
callback_button = types.InlineKeyboardButton(text="Выберите услугу", callback_data="1")
callback_button1 = types.InlineKeyboardButton(text="Пополнить баланс", callback_data="balans")
callback_button2 = types.InlineKeyboardButton(text="Выберите направление доставки", callback_data="1.2")
callback_button3 = types.InlineKeyboardButton(text="Связь с оператором", callback_data="1.3")
keyboard.add(callback_button, callback_button1, callback_button2, callback_button3)
bot.reply_to(message,
" Привет, " + message.from_user.first_name + " \nВаш баланс:?<b>0 руб</b>", parse_mode='HTML')
bot.send_message(message.chat.id,
"Грузоперевозки по всей росии, услуги грузчиков,заказ спец\n техники",reply_markup=keyboard)
@bot.callback_query_handler(func=lambda call: True)
def callback_inline(call):
if call.message:
if call.data == "1":
keyboard = types.InlineKeyboardMarkup(row_width=2)
a = types.InlineKeyboardButton(text="Грузоперевозки ", callback_data="2")
b = types.InlineKeyboardButton(text="Заказ спец техники ", callback_data="2.1")
c = types.InlineKeyboardButton(text="Услуги грузчиков ", callback_data="2.2")
keyboard.add(a, b, c)
bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id,
text="Это официальный бот", reply_markup=keyboard)
Ответы (1 шт):
Автор решения: oleksandrigo
→ Ссылка
Немного поправил ваш код
@bot.message_handler(commands=['start'])
def any_msg(message: types.Message):
markup = types.InlineKeyboardMarkup(row_width=1).add(
types.InlineKeyboardButton(text="Выберите услугу", callback_data="choise_service"),
types.InlineKeyboardButton(text="Пополнить баланс", callback_data="replenish_balans"),
types.InlineKeyboardButton(text="Выберите направление доставки", callback_data="1.2"),
types.InlineKeyboardButton(text="Связь с оператором", callback_data="1.3")
)
bot.reply_to(message, f"Привет, {message.from_user.first_name}\nВаш баланс:?<b>0 руб</b>", parse_mode='HTML')
bot.send_message(message.chat.id,
"Грузоперевозки по всей росии, услуги грузчиков,заказ спец\n техники",
reply_markup=markup)
@bot.callback_query_handler(func=lambda call: call.data == "replenish_balans")
def replenish_balans(call: types.CallbackQuery):
bot.send_message(call.message.chat.id, "Введите сумму пополнения")
bot.register_next_step_handler(call.message, take_money)
def take_money(message: types.Message):
# проверка, является ли введенный юзером текст числом (только int)
if message.text.isdigit():
markup = types.InlineKeyboardMarkup(row_width=1).add(
types.InlineKeyboardButton(text="Выберите услугу", callback_data="choise_service"),
types.InlineKeyboardButton(text="Пополнить баланс", callback_data="replenish_balans"),
types.InlineKeyboardButton(text="Выберите направление доставки", callback_data="1.2"),
types.InlineKeyboardButton(text="Связь с оператором", callback_data="1.3")
)
bot.send_message(message.chat.id,
f"Счет пополнен на {message.text}",
reply_markup=markup)
else:
# в случае если не число заствляем ввести еще раз и так до победного конца
bot.send_message(message.chat.id, "Некоректный ввод\nВведите сумму пополнения еще раз")
bot.register_next_step_handler(message, take_money)
@bot.callback_query_handler(func=lambda call: call.data == "choise_service")
def choise_service(call: types.CallbackQuery):
markup = types.InlineKeyboardMarkup(row_width=2).add(
types.InlineKeyboardButton(text="Грузоперевозки ", callback_data="2"),
types.InlineKeyboardButton(text="Заказ спец техники ", callback_data="2.1"),
types.InlineKeyboardButton(text="Услуги грузчиков ", callback_data="2.2")
)
bot.edit_message_text(chat_id=call.message.chat.id,
message_id=call.message.message_id,
text="Это официальный бот",
reply_markup=markup)