Принимать сообщение при условии. PyTelegramBotApi
Как можно сделать так, чтобы бот видел введет ли пользователь цифру, когда нажмёт на Inline кнопку "Ввести цифру"? Использую библиотеку PyTelegramBotApi, он же telebot
@client.message_handler(commands=['start'])
def command_handler(message):
Markup_inline = types.InlineKeyboardMarkup(row_width=1)
BtnYes = types.InlineKeyboardButton(text="Ввести цифру", callback_data="Yes")
BtnNo = types.InlineKeyboardButton(text="Не вводить цифру", callback_data="No")
Markup_inline.add(BtnNo, BtnRefYes)
client.send_message(message.chat.id, 'Выбери да или нет', reply_markup = Markup_inline)
@client.callback_query_handler(func = lambda call: True)
def Answer(call):
Markup_Inline = types.InlineKeyboardMarkup(row_width=1)
if call.data=='Yes':
client.edit_message_text('Введи цифру', call.message.chat.id, call.message.message_id, reply_markup = Markup_Inline)
@client.message_handler(content_types = ['text'])
def Answer2(message):
if (message.text).isdigit():
print('цифра введена')
Ответы (1 шт):
Автор решения: Violet
→ Ссылка
Опечатка:
BtnYes = types.InlineKeyboardButton(text="Ввести цифру", callback_data="Yes")
Markup_inline.add(BtnNo, BtnRefYes)
и
@client.message_handler(content_types = ['text'])
def Answer2(message):
if message.text.isdigit():
print('цифра введена')
расположить под @client.callback_query_handler(func=lambda call: True)
полный код:
import telebot
from telebot import types
client = telebot.TeleBot('9:AAE')
print(client.get_me())
@client.message_handler(commands=['start'])
def command_handler(message):
markup = types.InlineKeyboardMarkup(row_width=1)
yes = types.InlineKeyboardButton(text="Ввести цифру", callback_data="Yes")
no = types.InlineKeyboardButton(text="Не вводить цифру", callback_data="No")
markup.add(no, yes)
client.send_message(message.chat.id, 'Выбери да или нет', reply_markup=markup)
@client.callback_query_handler(func=lambda call: True)
def answer(call):
if call.data == 'Yes':
client.edit_message_text('Введи цифру', call.message.chat.id, call.message.message_id)
@client.message_handler(content_types=['text'])
def answer2(message):
if message.text.isdigit():
print('цифра введена')
client.polling(none_stop=True, interval=0)
Но имейте в виду, что если ввести цифру без нажатия кнопки, то всё равно сработает print('цифра введена') т.к. @client.message_handler(content_types=['text']) ловит любой текст отправленный боту.
Чтобы print('цифра введена') срабатывал только после нажатия кнопки и ввода сообщения:
@client.callback_query_handler(func=lambda call: True)
def answer(call):
if call.data == 'Yes':
msg = client.edit_message_text('Введи цифру', call.message.chat.id, call.message.message_id)
client.register_next_step_handler(msg, answer3)
def answer3(message):
if message.text.isdigit():
print('цифра введена после кнопки')