Задать вопрос
ittadoru
@ittadoru
Новичок Python

Не работает кнопка назад в inlinekeyboard, что делать?

Создаю чат бот, но в самом же начале столкнулся с проблемой, в inlinekeyboard создал две кнопки, переходя по ним работает изменение текста и ещё новые 2 кнопки, одна из них кнопка назад, реализовал её в таком виде, что просто перенёс функции стартового меню, но не работает, помогите решить, приложите код который будет работать, библиотеки всё скачал и перепроверил, первая функция работает, а вот именно кнопка назад нет, как её правильно реализовать

import telebot
from telebot import types

bot = telebot.TeleBot('6120723755:AAFfrdnbVfEI0R-PxTAVh1IbNfhhh11s98k')


@bot.message_handler(commands={'start'})
def start(message):
    markup_inline = types.InlineKeyboardMarkup(row_width=2)
    btn_inline1 = types.InlineKeyboardButton(
        text='Что бот может?', callback_data='skills')
    btn_inline2 = types.InlineKeyboardButton(
        text='Как начать чат?', callback_data='start_chat')
    markup_inline.add(btn_inline1, btn_inline2)
    start_text = f'Привет <b>{message.from_user.first_name}</b>, в этом анонимном чате ты сможешь общаться с людьми, при этом не раскрывая свою личность и профиль в телеграм, это поможет не предвзято поговорить с собеседником. Но так же и он будет анонимным, и тебе не удасться узнать его личность, <b><em>ну разве что если ты сам у него не спросишь)</em></b>'
    bot.send_message(message.chat.id, start_text,
                     parse_mode='html', reply_markup=markup_inline)
    # bot.send_message(message.chat.id, '')


@bot.callback_query_handler(func=lambda callback: callback.data)
def skills(call):
    if call.data == 'skills':
        btn_back = types.InlineKeyboardButton(
            text='Назад <--', callback_data='back')
        btn_skills = types.InlineKeyboardButton(
            text='Конкретнее...', callback_data='skills_part2')
        markup = types.InlineKeyboardMarkup(row_width=2)
        markup.add(btn_back, btn_skills)
        bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id,
                              text='На данном этапе развития бот может выполнять стандартные задачи для анонимного чат бота', reply_markup=markup)
    elif call.data == 'start_chat':
        pass


@bot.callback_query_handler(func=lambda callback: callback.data)
def back(call):
    if call.data == 'back':
        bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id,
                              text=f'Привет <b>{call.message.from_user.first_name}</b>, в этом анонимном чате ты сможешь общаться с людьми, при этом не раскрывая свою личность и профиль в телеграм, это поможет не предвзято поговорить с собеседником. Но так же и он будет анонимным, и тебе не удасться узнать его личность, <b><em>ну разве что если ты сам у него не спросишь)</em></b>')
        btn_inline1 = types.InlineKeyboardButton(
            text='Что бот может?', callback_data='skills')
        btn_inline2 = types.InlineKeyboardButton(
            text='Как начать чат?', callback_data='start_chat')
        markup_inline = types.InlineKeyboardMarkup(row_width=2)
        markup_inline.add(btn_inline1, btn_inline2)


if __name__ == '__main__':
    bot.infinity_polling()
  • Вопрос задан
  • 78 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
nki
@nki
bezkart.ru готовая система лояльности
У вас два обработчика для Inline кнопок. Отрабатывает только первый.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Grom1902
Во первых вместо второго декоратора callback_query_handler нужно вставить elif что бы продолжить условие, а во вторых вместо того что бы после нажатия кнопки Back по новой создавать меню которое у вас есть после ввода команды старт, вы можете использовать этот код
elif call.data == 'back':
start(call.message)
Он будет отправлять в чат команду старт, после чего бот будет возвращаться к первичному меню
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы