Как создать кнопку в телеграмм-боте?
Я делаю Телеграмм бота в пайчарм через telebot: с помощью команду старт выводится приветствие и некоторые кнопки, а при нажатии на некоторую кнопку вылетает текст. Я хочу, чтобы вместе с этим текстом в конце появлялась кнопка "Вернуться в меню", и чтобы кнопка появлялась сама после текста без всяких команд и сообщений. Как это можно сделать?
import telebot from telebot import types bot = telebot.TeleBot('6586235154:AAEkapGqH9Cm2xTHbCxYE7w0zoL_56SAQMM') @bot.message_handler(commands=['start']) def send_welcome(message): markup = types.InlineKeyboardMarkup() button1 = types.InlineKeyboardButton("1.1. Строение органических соединений", callback_data='1') button2 = types.InlineKeyboardButton("1.2. Изомерия и Гомология", callback_data='2') for n in (button1,button2): markup.row(n) bot.send_message(message.chat.id, "<b>Привет, {0.first_name}!</b> Выбери раздел органики, а я пришлю тебе всю нужную теорию! ".format(message.from_user), parse_mode='html', reply_markup=markup) @bot.callback_query_handler(func=lambda callback: True) def callback_query(callback): if callback.data == '17': ???????????????????? send_welcome(message) if callback.data == '1': bot.send_message(callback.message.chat.id, '<b>Органическая химия</b> — раздел химии, в котором изучают соединения углерода, их строение, свойства....... @bot.???????????? def send_welcom(message): markup = types.InlineKeyboardMarkup() button17 = types.InlineKeyboardButton("Назад", callback_data='17') markup.add(button17) bot.send_message(message.chat.id, 'Назад?', reply_markup=markup) |
import telebot from telebot import types bot = telebot.TeleBot('6586235154:AAEkapGqH9Cm2xTHbCxYE7w0zoL_56SAQMM') @bot.message_handler(commands=['start']) def send_welcome(message): markup = types.InlineKeyboardMarkup() button1 = types.InlineKeyboardButton("1.1. Строение органических соединений", callback_data='1') button2 = types.InlineKeyboardButton("1.2. Изомерия и Гомология", callback_data='2') for n in (button1,button2): markup.row(n) bot.send_message(message.chat.id, "<b>Привет, {0.first_name}!</b> Выбери раздел органики, а я пришлю тебе всю нужную теорию! ".format(message.from_user), parse_mode='html', reply_markup=markup) @bot.callback_query_handler(func=lambda callback: True) def callback_query(callback): if callback.data == '17': ???????????????????? send_welcome(message) if callback.data == '1': bot.send_message(callback.message.chat.id, '<b>Органическая химия</b> — раздел химии, в котором изучают соединения углерода, их строение, свойства....... @bot.???????????? def send_welcom(message): markup = types.InlineKeyboardMarkup() button17 = types.InlineKeyboardButton("Назад", callback_data='17') markup.add(button17) bot.send_message(message.chat.id, 'Назад?', reply_markup=markup)
Дополнительно:
стоит посмотреть документацию, раздел с клавиатурами
Ответы:
телеграМ. Приложение называется "телеграМ". также как и инстаграМ
Вот так будет выглядеть ваш код, я изменил кое-что и сделал так чтобы текущее сообщение редактировалось и кнопка назад работает, если что-то не понятно напишите комментарий
import telebot from telebot import types bot = telebot.TeleBot('6586235154:AAEkapGqH9Cm2xTHbCxYE7w0zoL_56SAQMM') @bot.message_handler(commands=['start']) def send_welcome(message): markup = types.InlineKeyboardMarkup() button1 = types.InlineKeyboardButton("1.1. Строение органических соединений", callback_data='1') button2 = types.InlineKeyboardButton("1.2. Изомерия и Гомология", callback_data='2') for n in (button1,button2): markup.row(n) bot.send_message(message.chat.id, "<b>Привет, {0.first_name}!</b> Выбери раздел органики, а я пришлю тебе всю нужную теорию! ".format(message.from_user), parse_mode='html', reply_markup=markup) @bot.callback_query_handler(func=lambda callback: True) # Поменял callback на call для удобности def callback_query(call): if call.data == '17': # Каждый раз пересоздаём переменную для сброса предыдущих кнопок markup = types.InlineKeyboardMarkup() button1 = types.InlineKeyboardButton("1.1. Строение органических соединений", callback_data='1') button2 = types.InlineKeyboardButton("1.2. Изомерия и Гомология", callback_data='2') for n in (button1,button2): markup.row(n) # Используем edit_message_text для смены текущего сообщения, это удобно и красиво bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text="<b>Привет, {0.first_name}!</b> Выбери раздел органики, а я пришлю тебе всю нужную теорию! ".format(call.message.from_user), parse_mode='html', reply_markup=markup) if call.data == '1': # Так будет выглядеть ваш каждый блок с текстом markup = types.InlineKeyboardMarkup() button17 = types.InlineKeyboardButton("Назад", callback_data='17') markup.row(button17) # Используем edit_message_text для смены текущего сообщения, это удобно и красиво bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text='<b>Органическая химия</b> — раздел химии, в котором изучают соединения углерода, их строение, свойства.......'.format(call.message.from_user), parse_mode='html', reply_markup=markup) bot.polling(none_stop=True) |
import telebot from telebot import types bot = telebot.TeleBot('6586235154:AAEkapGqH9Cm2xTHbCxYE7w0zoL_56SAQMM') @bot.message_handler(commands=['start']) def send_welcome(message): markup = types.InlineKeyboardMarkup() button1 = types.InlineKeyboardButton("1.1. Строение органических соединений", callback_data='1') button2 = types.InlineKeyboardButton("1.2. Изомерия и Гомология", callback_data='2') for n in (button1,button2): markup.row(n) bot.send_message(message.chat.id, "<b>Привет, {0.first_name}!</b> Выбери раздел органики, а я пришлю тебе всю нужную теорию! ".format(message.from_user), parse_mode='html', reply_markup=markup) @bot.callback_query_handler(func=lambda callback: True) # Поменял callback на call для удобности def callback_query(call): if call.data == '17': # Каждый раз пересоздаём переменную для сброса предыдущих кнопок markup = types.InlineKeyboardMarkup() button1 = types.InlineKeyboardButton("1.1. Строение органических соединений", callback_data='1') button2 = types.InlineKeyboardButton("1.2. Изомерия и Гомология", callback_data='2') for n in (button1,button2): markup.row(n) # Используем edit_message_text для смены текущего сообщения, это удобно и красиво bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text="<b>Привет, {0.first_name}!</b> Выбери раздел органики, а я пришлю тебе всю нужную теорию! ".format(call.message.from_user), parse_mode='html', reply_markup=markup) if call.data == '1': # Так будет выглядеть ваш каждый блок с текстом markup = types.InlineKeyboardMarkup() button17 = types.InlineKeyboardButton("Назад", callback_data='17') markup.row(button17) # Используем edit_message_text для смены текущего сообщения, это удобно и красиво bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text='<b>Органическая химия</b> — раздел химии, в котором изучают соединения углерода, их строение, свойства.......'.format(call.message.from_user), parse_mode='html', reply_markup=markup) bot.polling(none_stop=True)
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Для создания кнопки в телеграмм-боте необходимо использовать Telegram Bot API, который предоставляет разработчикам возможность создавать интерактивные элементы, такие как кнопки. Вот пример кода на PHP, который позволяет создать кнопку в телеграмм-боте:
$botToken = 'YOUR_BOT_TOKEN'; $chatId = 'YOUR_CHAT_ID'; $message = 'Нажмите на кнопку:'; $keyboard = [ 'keyboard' => [ [['text' => 'Название кнопки 1']], [['text' => 'Название кнопки 2']], ], 'resize_keyboard' => true, 'one_time_keyboard' => true, ]; $parameters = [ 'chat_id' => $chatId, 'text' => $message, 'reply_markup' => json_encode($keyboard), ]; $url = 'https://api.telegram.org/bot' . $botToken . '/sendMessage?' . http_build_query($parameters); file_get_contents($url);
В этом коде переменная $botToken должна содержать токен вашего телеграмм-бота, а переменная $chatId - идентификатор чата, куда будет отправлено сообщение с кнопкой. Затем создается массив $keyboard, который содержит массивы с текстом кнопок. Параметр 'resize_keyboard' указывает, что клавиатура должна занимать всю ширину экрана, а 'one_time_keyboard' - что клавиатура должна исчезнуть после нажатия на кнопку.
Далее формируется массив $parameters с необходимыми параметрами для отправки сообщения с кнопкой через Telegram Bot API. И, наконец, отправляется запрос к API с помощью функции file_get_contents, передавая URL с параметрами.
После выполнения этого кода в указанном чате должно появиться сообщение с кнопками, которые пользователь может нажимать для выполнения определенных действий.