Кнопка ссылка telegram bot python

InlineKeyboardButton¶

class telegram. InlineKeyboardButton ( text , url = None , callback_data = None , switch_inline_query = None , switch_inline_query_current_chat = None , callback_game = None , pay = None , login_url = None , web_app = None , switch_inline_query_chosen_chat = None , * , api_kwargs = None ) [source] ¶ Bases: telegram.TelegramObject This object represents one button of an inline keyboard. Objects of this class are comparable in terms of equality. Two objects of this class are considered equal, if their text , url , login_url , callback_data , switch_inline_query , switch_inline_query_current_chat , callback_game , web_app and pay are equal.

  • You must use exactly one of the optional fields. Mind that callback_game is not working as expected. Putting a game short name in it might, but is not guaranteed to work.
  • If your bot allows for arbitrary callback data, in keyboards returned in a response from telegram, callback_data maybe be an instance of telegram.ext.InvalidCallbackData . This will be the case, if the data associated with the button was already deleted.

    If your bot allows your arbitrary callback data, buttons whose callback data is a non-hashable object will become unhashable. Trying to evaluate hash(button) will result in a TypeError .

Changed in version 20.0: web_app is considered as well when comparing objects of this type in terms of equality.

  • text ( str ) – Label text on the button.
  • url ( str , optional) – HTTP or tg:// url to be opened when the button is pressed. Links tg://user?id= can be used to mention a user by their ID without using a username, if this is allowed by their privacy settings.

Tip This is similar to the new parameter switch_inline_query_chosen_chat , but gives no control over which chats can be selected.

Читайте также:  What is html hero

Caution The PTB team has discovered that this field works correctly only if your Telegram client is released after April 20th 2023.

Optional. HTTP or tg:// url to be opened when the button is pressed. Links tg://user?id= can be used to mention a user by their ID without using a username, if this is allowed by their privacy settings.

Changed in version 13.9: You can now mention a user using tg://user?id= .

Optional. An HTTPS URL used to automatically authorize the user. Can be used as a replacement for the Telegram Login Widget.

Only HTTPS links are allowed after Bot API 6.1.

Optional. Data to be sent in a callback query to the bot when button is pressed, UTF-8 1 — 64 bytes.

Optional. Description of the Web App that will be launched when the user presses the button. The Web App will be able to send an arbitrary message on behalf of the user using the method answer_web_app_query() . Available only in private chats between a user and the bot.

Optional. If set, pressing the button will prompt the user to select one of their chats, open that chat and insert the bot’s username and the specified inline query in the input field. Can be empty, in which case just the bot’s username will be inserted. This offers an easy way for users to start using your bot in inline mode when they are currently in a private chat with it. Especially useful when combined with switch_pm* actions — in this case the user will be automatically returned to the chat they switched from, skipping the chat selection screen.

This is similar to the new parameter switch_inline_query_chosen_chat , but gives no control over which chats can be selected.

Optional. If set, pressing the button will insert the bot’s username and the specified inline query in the current chat’s input field. Can be empty, in which case only the bot’s username will be inserted. This offers a quick way for the user to open your bot in inline mode in the same chat — good for selecting something from multiple options.

Optional. Description of the game that will be launched when the user presses the button. This type of button must always be the first button in the first row.

Optional. Specify True , to send a Pay button. This type of button must always be the first button in the first row and can only be used in invoice messages.

Optional. If set, pressing the button will prompt the user to select one of their chats of the specified type, open that chat and insert the bot’s username and the specified inline query in the input field.

This is similar to switch_inline_query , but gives more control on which chats can be selected.

The PTB team has discovered that this field works correctly only if your Telegram client is released after April 20th 2023.

Sets callback_data to the passed object. Intended to be used by telegram.ext.CallbackDataCache .

Источник

Создание кнопок для телеграмм бота с использованием библиотеки pyTelegramBotAPI

Доброго времени суток. Телеграмм — божественный месседж скаченный у каждого на телефонах/компьютерах и не только. После прочтение этой статьи вы научитесь создавать кнопки для вашего телеграмм бота. Желаю удачи, в прочтении!)

Предупреждение

Забыл предупредить, в этой статье не будет сказано о создание бота, получение токена через BotFather. Для этого прочитайте документацию библиотеки или посмотрите ролики на эту тему в ютубе(Для удобство ссылку на документацию на русском языке библиотеки pyTelegramBotAPI оставлю в описании). И так, вернемся к теме.

Создание url кнопки

Url кнопки используются, когда хотим создать кнопку при клике которой, пользователь переходил на сайт. Пример:

нажима на «перейти», телеграмм перекинет его на сайт, который вы оставили при создание url кнопки, но как же собственно создать? Легко!

import telebot from telebot import types # для указание типов import config bot = telebot.TeleBot(config.token) # токен лежит в файле config.py @bot.message_handler(commands=['start']) #создаем команду def start(message): markup = types.InlineKeyboardMarkup() button1 = types.InlineKeyboardButton("Сайт Хабр", url='https://habr.com/ru/all/') markup.add(button1) bot.send_message(message.chat.id, "Привет, ! Нажми на кнопку и перейди на сайт)".format(message.from_user), reply_markup=markup)kup) bot.polling(none_stop=True)

при создание url-кнопки используется тип InlineKeyboardMarkup, в который мы добавляем кнопку и с помощью reply_markup=markup выводим это в чат(обязательно не забудьте указать это, иначе ваша кнопка просто не будете отображаться).

Создание Reply кнопки

Я не знаю как корректно называются кнопки использующие тип ReplyKeyboardMarkup, но я много практиковался в их создание и покажу вам, как это делается. Вот пример Reply кнопок:

import telebot from telebot import types # для указание типов import config bot = telebot.TeleBot(config.token) @bot.message_handler(commands=['start']) def start(message): markup = types.ReplyKeyboardMarkup(resize_keyboard=True) btn1 = types.KeyboardButton("👋 Поздороваться") btn2 = types.KeyboardButton("❓ Задать вопрос") markup.add(btn1, btn2) bot.send_message(message.chat.id, text="Привет, ! Я тестовый бот для твоей статьи для habr.com".format(message.from_user), reply_markup=markup) @bot.message_handler(content_types=['text']) def func(message): if(message.text == "👋 Поздороваться"): bot.send_message(message.chat.id, text="Привеет.. Спасибо что читаешь статью!)") elif(message.text == "❓ Задать вопрос"): markup = types.ReplyKeyboardMarkup(resize_keyboard=True) btn1 = types.KeyboardButton("Как меня зовут?") btn2 = types.KeyboardButton("Что я могу?") back = types.KeyboardButton("Вернуться в главное меню") markup.add(btn1, btn2, back) bot.send_message(message.chat.id, text="Задай мне вопрос", reply_markup=markup) elif(message.text == "Как меня зовут?"): bot.send_message(message.chat.id, "У меня нет имени..") elif message.text == "Что я могу?": bot.send_message(message.chat.id, text="Поздороваться с читателями") elif (message.text == "Вернуться в главное меню"): markup = types.ReplyKeyboardMarkup(resize_keyboard=True) button1 = types.KeyboardButton("👋 Поздороваться") button2 = types.KeyboardButton("❓ Задать вопрос") markup.add(button1, button2) bot.send_message(message.chat.id, text="Вы вернулись в главное меню", reply_markup=markup) else: bot.send_message(message.chat.id, text="На такую комманду я не запрограммировал..") bot.polling(none_stop=True)

И так. Что бы создать Replay кнопку, нужно создать переменную, я назвал ее markup(9 строчка кода) в нее помещаем types.ReplyKeyboardMarkup(resize_keyboard=True). Resize_keybord=True выполняет функцию адаптации(я всегда указываю и вам советую тоже).После этого мы создаем переменную уже с самими кнопками и их текстом(10, 11 строчка) и затем добавляем эти переменные коммандой markup.add(__имя ваших переменных__). Коммандой bot.send_message(message.chat.id, text=»Привет, ! Я тестовый бот для твоей статьи для habr.com».format(message.from_user), reply_markup=markup) и обязательно не забывайте добавлять reply_markup=markup, иначе просто кнопки не будут отображаться.

Заключение

Большое спасибо вам за прочтение. Не судите строго, это моя первая статья, рассказал я скорее всего не очень, и только поверхностно. Если хотите углубиться в эту тему, почитайте документацию, кстати, вот документация по pyTelegramBotAPI на русском:

  • https://github-com.translate.goog/eternnoir/pyTelegramBotAPI?_x_tr_sl=auto&_x_tr_tl=ru&_x_tr_hl=ru&_x_tr_pto=nui при переходе вниз скролите и вы увидите документацию. пишите комменты с отзывами, буду рад их прочитать.
  • Мой телеграмм канал: https://t.me/it_diaryy

Источник

Оцените статью