Как мне передать локальную переменную в обработчик для inline-клавиатуры callback_query_handler?
Пишу уже не один бот, и сталкиваюсь с такой проблемой - мне нужно передать переменную в обработчик нажатий inline-клавиатуры. Переменная локальная (примите это во внимание!) и должна передаться в обработчик посредством передачи аргумента, либо же каким-то другим способом (за исключением создания глобальной переменной!!!)
Есть у кого предположения; выслушаю любые идеи. Спасибо)
Код с комментариями:
...
@bot.message_handler(content_types=["text"])
def create(message):
key = types.InlineKeyboardMarkup()
btn1 = types.InlineKeyboardButton(text="Пример кнопки 1", callback_data = "Пример кнопки 1")
btn2 = types.InlineKeyboardButton(text="Пример кнопки 2", callback_data = "Пример кнопки 2")
key.add(btn1,btn2)
msg = bot.send_message(message.chat.id, "Текст", reply_markup = key)
argument = 'Какой-то текст для примера' # вот эту переменную нужно передать в обработчик
...
@bot.callback_query_handler(func=lambda c:True)
# вот сюда нужно передать локальную переменную из другой функции, например argument
# что-то похожее на это:
# def inline(c, argument):
def inline(c):
if c.data == "Пример кнопки 1":
#print('Вот здесь должно появится значение аргумента = ' + argument)
pass
elif c.data == "Пример кнопки 2":
pass
Ответы (1 шт):
Автор решения: D. Violet
→ Ссылка
@bot.message_handler(content_types=["text"])
def create(message, f=None):
if f == 'inline':
argument = 'Какой-то текст для примера' # вот эту переменную нужно передать в обработчик
return argument
else:
key = types.InlineKeyboardMarkup()
btn1 = types.InlineKeyboardButton(text="Пример кнопки 1", callback_data="Пример кнопки 1")
btn2 = types.InlineKeyboardButton(text="Пример кнопки 2", callback_data="Пример кнопки 2")
key.add(btn1, btn2)
bot.send_message(message.chat.id, "Текст", reply_markup=key)
@bot.callback_query_handler(func=lambda c: True)
def inline(c):
if c.data == "Пример кнопки 1":
print('Вот здесь должно появится значение аргумента = ' + create(None, 'inline'))
elif c.data == "Пример кнопки 2":
pass