Python TelobotAPI. Как передать в следующую функцию inline-ответ пользователя на сообщение, и аргумент, созданный в прошлой функции?
Как известно, с ответами пользователя в формате "ReplyButton" или "text" работает метод "register_next_step_handler(message, function, argument). К тому же, помимио самого сообщения (message) и следующей функции(function), ему в качестве аргумента можно передать аргумент(argument), который он передаст в эту самую функцию. В документации указано, что этот метод начнёт работать только тогда, когда после отправки сообщения message, бот получит любое сообщение от пользователя. В случае, когда message предполагает ответ по inline-кнопке, передать информацию в вызываемую function нельзя, да и сам хендлер не вызывается, так как inline-действие не считается сообщением. Думаю, есть какой-то метод, который реализует данное действие, но в документации очень странно характеризуются методы регистрации хендлеров. Прошу, помогите!
def xxx(message):
candidate = "111" # <-Создаю аргумент для след. функции
coming_text = "Готовы ли вы отправить этого кандидата?"
markup = types.InlineKeyboardMarkup()
btn1 = types.InlineKeyboardButton(text="Да", callback_data="y")
btn2 = types.InlineKeyboardButton(text="Нет", callback_data="n")
markup.add(btn1, btn2)
msg = bot.send_message(message.chat.id, text=coming_text.format(message.from_user), reply_markup=markup)
bot.register_next_step_handler(msg, send_candidate, candidate)# <-добавляю в хендлер
# <- ЧТобы запустить функцию ниже, нужно отправить боту текстовое сообщение, но в данной задаче требуется её вызов именно по inline-кнопке.
def send_candidate(call, candidate):# <- ожидаемая функция
print(1)
print(call.data) # <-здесь выходит ошибка
print(candidate.get_info()["n"])
Ответы (1 шт):
Сделай более точную callback_data
btn1 = types.InlineKeyboardButton(text="Да", callback_data="send_condidate_y")
btn2 = types.InlineKeyboardButton(text="Нет", callback_data="send_condidate_y")
Здесь тебе не нужен будет
bot.register_next_step_handler(msg, send_candidate, candidate)# <-добавляю в хендлер
Можно просто улавливать ответ другим хендлером
@bot.callback_query_handler(func=lambda callback: 'send_condidate_' in callback.data
def send_candidate(call):
if call.data.split('_')[-1] == 'y':
pass
else:
pass