Почему не работают инлайн кнопки в телеграмм боте через 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)