Задать вопрос
  • Как создать кнопку в телеграмм-боте?

    @SAAAS
    Вот так будет выглядеть ваш код, я изменил кое-что и сделал так чтобы текущее сообщение редактировалось и кнопка назад работает, если что-то не понятно напишите комментарий
    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)
    Ответ написан
    Комментировать
  • Как изменить ReplyKeyboardMarkup клавиатуру?

    @SAAAS
    Да, от части, согласен с Алексей Юдов, каждый раз когда вам нужно изменить кнопки в ReplyKeyboardMarkup, просто, напишите новый
    markup = types.ReplyKeyboardMarkup() # это обязательно делать перед каждым изменением, иначе буду добавляться новые кнопки к уже существующим
    markup.row(button, button1)
    , где button и button1 ваши кнопки
    Ответ написан
    Комментировать