Возможно ли скрыть многосимвольный код в inline кнопке телеграм бота?
Возможно ли скрыть код по типу UHnUd2qun2731njkfdms7HQJN в inline кнопке, чтобы на ней было написано "скопировать код", а при нажатии копировался сам код?
Ответы (3 шт):
если это кнопка типа callback: то она принимает callback_data, которая может быть только строкой, нужно просто передать ее именованным аргументом
#code_to_be_copied = '''строка данных с кодом''', которая приходит в функцию создания кнопки
def some_func(code_to_be_copied)
markup = telebot.types.InlineKeyboardMarkup()
callback_button = telebot.types.InlineKeyboardButton(text='скопировать код', callback_data = code_to_be_copied)
markup.add(callback_button)
return markup
далее по call.data можно вернуть это значение Например:
@bot.callback_query_handler(func=lambda call: True)
def callback_listener(call):
return call.data
как вариант:
def keyboard(where_call):
value = 'YourCode!' # функция генерации случайного кода
if where_call == 'start':
markup = telebot.types.InlineKeyboardMarkup()
callback_button = telebot.types.InlineKeyboardButton(text='Показать код',
callback_data="['show', '" + value + "']")
markup.add(callback_button)
return markup
elif where_call == 'hide':
markup = telebot.types.InlineKeyboardMarkup()
callback_button = telebot.types.InlineKeyboardButton(text='Скрыть код', callback_data='hide')
markup.add(callback_button)
return markup
@bot.message_handler(commands=['start'])
def start(message):
img = open('files/IMG_0509.JPG', 'rb')
bot.send_photo(message.chat.id, img, reply_markup=keyboard('start'))
img.close()
@bot.callback_query_handler(func=lambda call: True)
def callback_inline(call):
if call.data.startswith("['show'"):
bot.send_message(call.message.chat.id, '`{}`'.format(ast.literal_eval(call.data)[1]), parse_mode='Markdown',
reply_markup=keyboard('hide'))
elif call.data == 'hide':
bot.delete_message(chat_id=call.message.chat.id, message_id=call.message.message_id)
Таким образом при нажатии Скрыть код сообщение с ним будет удалено.
Markdown позволит копировать код на мобильных устройствах по клику на него.
Просто так скопировать в буфер не получится, единственный способ, который я знаю это использовать parse_mode='Markdown', но как именно это реализовать к сожалению не знаю
что-то вроде:
...
bot.send_message(message.chat.id,
text="*bold* _italic_ `fixed width font` [copy](http://google.com).",
parse_mode='Markdown')
Есть много подобных вопросов, попробуйте поэкспериментировать с этим
Мой пример отсюда:
https://stackoverflow.com/questions/59713920/how-to-make-that-when-you-click-on-the-text-it-was-copied-pytelegrambotapi/59714935#59714935