@DarkiDeuce

Как передать дополнительный аргумент в callback_query_handler?

Библиотека TeleBot
Не понимаю как передать дополнительный аргумент в функцию, которая срабатывает после нажатия инлайновой кнопки (callback_query_handler)

Например есть код:
markup = types.InlineKeyboardMarkup()
markup.add(types.InlineKeyboardButton("текст кнопки", callback_data = "Button"))
photo = open(f"путь к фото", 'rb')
bot.send_photo(message.chat.id, photo,  reply_markup = markup)

@bot.callback_query_handler(func=lambda call: True)
def test(call):
    if call.data == "Button":
         bot.send_message(message.chat.id, "текст")


Как в функцию test передать ещё один аргумент при нажатии на кнопку?
  • Вопрос задан
  • 3189 просмотров
Решения вопроса 1
@TKDBOT
Учу python. Готов к конструктивной критике.
https://qna.habr.com/q/1143336

Вот тут я задавал почти такой же вопрос. Ответ есть.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@lum99
Все аргументы можно перечислить через запятую.
То есть:
bot.send_message(message.chat.id, "текст", ТУТ)

Так же сработает и просто повторить условие, возможно займет на пару доль секунд дольше, но иногда норм решение.
То есть:
if call.data == "Button":
bot.send_message(message.chat.id, "текст")
bot.send_message(message.chat.id, ДРУГОЙ АРГУМЕНТ)
Ответ написан
Комментировать
@maks_vorobiov
from telebot import types

# При создании кнопки
button_data = {'action': 'do_something', 'arg': 'some_argument'}
button_text = 'Нажми меня с аргументом'
button = types.InlineKeyboardButton(text=button_text, callback_data=json.dumps(button_data))

# В обработчике
@bot.callback_query_handler(func=lambda call: json.loads(call.data)['action'] == 'do_something')
def handle_button_press(call):
data = json.loads(call.data)
argument = data['arg']
bot.send_message(call.message.chat.id, f'Вы нажали кнопку с аргументом: {argument}')
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы