Возможно ли скрыть многосимвольный код в inline кнопке телеграм бота?

Возможно ли скрыть код по типу UHnUd2qun2731njkfdms7HQJN в inline кнопке, чтобы на ней было написано "скопировать код", а при нажатии копировался сам код?


Ответы (3 шт):

Автор решения: Py_DG

если это кнопка типа 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
→ Ссылка
Автор решения: Violet

как вариант:

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 позволит копировать код на мобильных устройствах по клику на него.

→ Ссылка
Автор решения: Py_DG

Просто так скопировать в буфер не получится, единственный способ, который я знаю это использовать 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

→ Ссылка