Top.Mail.Ru
Ответы

Почему не работают инлайн кнопки в телеграмм боте через telebot

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
 import telebot
from telebot import types

# Создаем объект бота
bot = telebot.TeleBot("qwerty")

# Список зарегистрированных пользователей
registered_users = []

# Хэндлер для получения ФИО
@bot.message_handler(commands=['start'])
def start_handler(message):
    user = message.from_user.username  # Получаем юзернейм пользователя

    # Проверяем, зарегистрирован ли пользователь
    if user in registered_users:
        bot.send_message(message.chat.id, "Вы уже зарегистрированы. Перейдите в главное меню: /menu")
        
      
    else:
        bot.send_message(message.chat.id, "Ваше ФИО:")
        bot.register_next_step_handler(message, get_name)

# Хэндлер для получения даты рождения
def get_name(message):
    global name
    name = message.text
    bot.send_message(message.chat.id, f"Отлично! {name}, теперь введите вашу дату рождения (в формате ДД.ММ.ГГГГ пример: 25.04.2010):")
    bot.register_next_step_handler(message, get_classs)

# Получение класса
def get_classs(message):
    global classs
    classs = message.text
    bot.send_message(message.chat.id, f"Последний рывок! Осталось ввести свой класс\n(пример 8'В') ")
    bot.register_next_step_handler(message, get_date)


def get_date(message):
    global date
    date = message.text
    user = message.from_user.username  # Получаем юзернейм пользователя
    
    # Проверяем, зарегистрирован ли пользователь
    if user in registered_users:
        bot.send_message(message.chat.id, "Вы уже зарегистрированы.")
    else:
        # Регистрируем пользователя
        registered_users.append(user)

        # Сохраняем данные пользователя в файл
        with open('users.txt', 'a') as f:
            f.write(f'{user} | {name} | {date} | {classs}\n')

        bot.send_message(message.chat.id, "Вы успешно зарегистрированы! Перейдите в главное меню: /menu")
        

    # Выводим главное меню
@bot.message_handler(commands=['menu'])
def profile(message):
    markup = types.InlineKeyboardMarkup()
    markup.add(types.InlineKeyboardButton(text="Профиль", callback_data="profile"))
    markup.add(types.InlineKeyboardButton(text="Твой класс", callback_data="classs"))
    markup.add(types.InlineKeyboardButton(text="Расписание", callback_data="rasp"))
    markup.add(types.InlineKeyboardButton(text="О боте", callback_data="obote"))


    bot.send_message(message.chat.id, "Главное меню:", reply_markup=markup)
# Хэндлер для проверки регистрации и обработки нажатий на инлайн-кнопки
@bot.callback_query_handler(func=lambda call: call.data in ["profile", "classs", "rasp", "obote"])
def check_registration(call):
    user = call.from_user.username  # Получаем юзернейм пользователя
    
    if user not in registered_users:
        bot.send_message(call.message.chat.id, "Вы не зарегистрированы! Введите команду /start для регистрации.")
    else:
        # Обрабатываем нажатия на кнопки
        if call.data == "profile":
            # Отправляем профиль пользователя
            bot.send_message(call.message.chat.id, f"ФИО: {name}nДата рождения: {date}nКласс: {classs}")
        elif call.data == "classs":
            # Отправляем информацию о классе пользователя
            bot.send_message(call.message.chat.id, f"Ваш класс: {classs}")
        elif call.data == "rasp":
            # Отправляем расписание занятий
            bot.send_message(call.message.chat.id, "Расписание занятий:")
            # Здесь можно добавить код для получения и отправки расписания занятий из базы данных или другого источника.
        elif call.data == "obote":
            # Отправляем расписание занятий
            bot.send_message(call.message.chat.id, "//")

    
# Запускаем бота
bot.polling() 



Вот код, кнопки не работают, а все остальное да

Только авторизированные пользователи могут оставлять свои ответы
Дата
Популярность
Аватар пользователя
Знаток

Проблема в том, что это инлайн кнопки, а инлайн кнопки могут быть выведены только вместе с каким либо текстом, например:
bot.send_message(message.chat.id, 'Выберите действие', reply_markup=markup)

12345678
 @bot.message_handler(commands=['menu']) 
def profile(message): 
    markup = types.InlineKeyboardMarkup() 
    markup.add(types.InlineKeyboardButton(text="Профиль", callback_data="profile")) 
    markup.add(types.InlineKeyboardButton(text="Твой класс", callback_data="classs")) 
    markup.add(types.InlineKeyboardButton(text="Расписание", callback_data="rasp")) 
    markup.add(types.InlineKeyboardButton(text="О боте", callback_data="obote"))
    bot.send_message(message.chat.id, 'Выберите действие!', reply_markup=markup) # Надо добавить эту строку 

Также я бы добавил в данный строку атрибуты none_stop=True (Всегда работает), interval=0 (За сколько бот отвечает на сообщение)

1
 bot.polling(none_stop=True, interval=0)