Телеграмм бот расписания
Erstellt am: 26. Januar 2025
Erstellt am: 26. Januar 2025
import telebot
from telebot import types
TOKEN = '7628698933:AAHKH2UAkF_KVteNYL3zpLSkgitjPw3M09A'
bot = telebot.TeleBot(TOKEN)
ponedelnik=["1.Разговоры о важном\n2.Литература\n3.Физика\n4.Геометрия\n5.Алгебра и Начало мат анализа\n6.Обществознание\n7.Русский язык"]
vtornik=["1.История\n2.География\n3.ОБЖ\n4.Физика\n5.Геометрия\n6.Литература\n7.Информатика"]
creda=["1.Информатика\n2.Русский язык\n3.Индивидуальный проэкт\n4.Алгебра и Начало мат анализа\n5.Физика\n6.Лабраторный практикум по физике\n7.Биология"]
chetverg=["1.Английский язык\n2.Обществознание\n3.История\n4.Литература\n5.Физкультура\n6.Информатика\n7.Алгебра и начало мат. анализа"]
pyanisa=["1.Английский язык\n2.Физика\n3.Информатика\n4.Геометрия\n5.Алгебра и начало мат. анализа\n6.Вероятность и статистика\n7.Химия"]
def rasp(message):
if message.text == 'Понедельник':
bot.send_message(message.chat.id, ponedelnik)
if message.text == 'Вторник':
bot.send_message(message.chat.id, vtornik)
if message.text == 'Среда':
bot.send_message(message.chat.id, creda)
if message.text == 'Четверг':
bot.send_message(message.chat.id, chetverg)
if message.text == 'Пятница':
bot.send_message(message.chat.id, pyanisa)
bot.register_next_step_handler(message, rasp)
textif message.text == 'Главная': markup = types.ReplyKeyboardMarkup(resize_keyboard=True) item1 = types.KeyboardButton('Расписание уроков') item2 = types.KeyboardButton('Столовая') item3 = types.KeyboardButton('Праздники, каникулы') markup.add(item1, item2, item3) bot.send_message(message.chat.id, 'Ты вернулся в главное меню') bot.send_message(message.chat.id, 'Выбери что бы ты хотел узнать:', reply_markup=markup) bot.register_next_step_handler(message, raspisanie) bot.clear_step_handler(message)
@bot.message_handler(commands=['start'])
def start(message):
markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
item1 = types.KeyboardButton('Расписание уроков')
item2 = types.KeyboardButton('Столовая')
item3 = types.KeyboardButton('Праздники, каникулы')
markup.add(item1, item2, item3)
bot.send_message(message.chat.id, 'Привет, {0.first_name}!'.format(message.from_user))
bot.send_message(message.chat.id, 'Выбери что бы ты хотел узнать:', reply_markup=markup)
@bot.message_handler(content_types=['text'])
def raspisanie (message):
if message.text == 'Расписание уроков':
markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
item1 = types.KeyboardButton('Понедельник')
item2 = types.KeyboardButton('Вторник',)
item3 = types.KeyboardButton('Среда')
item4 = types.KeyboardButton('Четверг')
item5 = types.KeyboardButton('Пятница')
back = types.KeyboardButton('Главная')
markup.add(item1, item2, item3, item4, item5, back)
bot.send_message(message.chat.id, 'Ты зашёл в меню «расписание уроков»!')
bot.send_message(message.chat.id, 'Выбери день недели', reply_markup=markup)
bot.register_next_step_handler(message, rasp)
@bot.message_handler(content_types=['text'])
def prezent(message):
if message.text == 'Праздники, каникулы':
markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
item1 = types.KeyboardButton('Расписание уроков')
item2 = types.KeyboardButton('Столовая')
item3 = types.KeyboardButton('Праздники, каникулы')
markup.add(item1, item2, item3)
bot.send_message(message.chat.id, 'Привет, {0.first_name}!'.format(message.from_user))
bot.send_message(message.chat.id, 'Выбери что бы ты хотел узнать:', reply_markup=markup)
bot.polling(none_stop=True) исправить код по критерям: там при команде /start появляется 3 кнопки, кнопка расписание уроков работает полностью и настроена, но при этом не работают остальные две, мне нужно чтобы на кнопку столовая выводилось как и в расписании уроков кнопки с днями недели и кнопка главная, а также чтобы нажимая на эти кнопки выводилось расписание питание на каждый день недели тип, само расписание я сам добавлю, а на кнопку Праздники, каникулы должна выводиться фотка которую я кинул тебе вместе с кодом и сообщение которое я тож сам добавлю, и после вывода фотки, должны остаться кнопки которые в главном меню
Ниже приведён один из вариантов кода, в котором все три главные кнопки работают по требуемой логике.
Обратите внимание на следующие моменты:
@bot.message_handler(content_types=['text'])
, в котором проверяем, какую кнопку нажал пользователь, и в зависимости от этого вызываем разные вспомогательные функции.rasp
и canteen
соответственно) для работы с днями недели.pythonimport telebot from telebot import types TOKEN = 'ВАШ_ТОКЕН_СЮДА' bot = telebot.TeleBot(TOKEN) # Расписание уроков ponedelnik = ["1.Разговоры о важном\n2.Литература\n3.Физика\n4.Геометрия\n5.Алгебра и Начало мат анализа\n6.Обществознание\n7.Русский язык"] vtornik = ["1.История\n2.География\n3.ОБЖ\n4.Физика\n5.Геометрия\n6.Литература\n7.Информатика"] creda = ["1.Информатика\n2.Русский язык\n3.Индивидуальный проект\n4.Алгебра и Начало мат анализа\n5.Физика\n6.Лабораторный практикум по физике\n7.Биология"] chetverg = ["1.Английский язык\n2.Обществознание\n3.История\n4.Литература\n5.Физкультура\n6.Информатика\n7.Алгебра и начало мат. анализа"] pyanisa = ["1.Английский язык\n2.Физика\n3.Информатика\n4.Геометрия\n5.Алгебра и начало мат. анализа\n6.Вероятность и статистика\n7.Химия"] # Расписание столовой (примерные заглушки, замените своими данными) canteen_ponedelnik = ["Завтрак: ...\nОбед: ...", "Что-то ещё..."] canteen_vtornik = ["Завтрак: ...\nОбед: ...", "Что-то ещё..."] canteen_creda = ["Завтрак: ...\nОбед: ...", "Что-то ещё..."] canteen_chetverg = ["Завтрак: ...\nОбед: ...", "Что-то ещё..."] canteen_pyanisa = ["Завтрак: ...\nОбед: ...", "Что-то ещё..."] # Главное меню (функция, чтобы избежать дублирования) def main_menu_markup(): markup = types.ReplyKeyboardMarkup(resize_keyboard=True) item1 = types.KeyboardButton('Расписание уроков') item2 = types.KeyboardButton('Столовая') item3 = types.KeyboardButton('Праздники, каникулы') markup.add(item1, item2, item3) return markup # Функция, которая показывает расписание уроков выбранного дня def rasp(message): # Обработка дней недели: if message.text == 'Понедельник': bot.send_message(message.chat.id, "\n".join(ponedelnik)) bot.register_next_step_handler(message, rasp) # Ждём следующего сообщения снова в rasp elif message.text == 'Вторник': bot.send_message(message.chat.id, "\n".join(vtornik)) bot.register_next_step_handler(message, rasp) elif message.text == 'Среда': bot.send_message(message.chat.id, "\n".join(creda)) bot.register_next_step_handler(message, rasp) elif message.text == 'Четверг': bot.send_message(message.chat.id, "\n".join(chetverg)) bot.register_next_step_handler(message, rasp) elif message.text == 'Пятница': bot.send_message(message.chat.id, "\n".join(pyanisa)) bot.register_next_step_handler(message, rasp) elif message.text == 'Главная': # Возвращаемся в главное меню bot.send_message(message.chat.id, "Ты вернулся в главное меню", reply_markup=main_menu_markup()) # Чтобы выйти из цикла next_step_handler, очистим step-хендлер bot.clear_step_handler_by_chat_id(chat_id=message.chat.id) else: # Если пользователь ввёл что-то другое — переспрашиваем bot.send_message(message.chat.id, "Пожалуйста, выбери день недели или 'Главная'.") bot.register_next_step_handler(message, rasp) # Функция, которая показывает расписание столовой выбранного дня def canteen(message): if message.text == 'Понедельник': bot.send_message(message.chat.id, "\n".join(canteen_ponedelnik)) bot.register_next_step_handler(message, canteen) elif message.text == 'Вторник': bot.send_message(message.chat.id, "\n".join(canteen_vtornik)) bot.register_next_step_handler(message, canteen) elif message.text == 'Среда': bot.send_message(message.chat.id, "\n".join(canteen_creda)) bot.register_next_step_handler(message, canteen) elif message.text == 'Четверг': bot.send_message(message.chat.id, "\n".join(canteen_chetverg)) bot.register_next_step_handler(message, canteen) elif message.text == 'Пятница': bot.send_message(message.chat.id, "\n".join(canteen_pyanisa)) bot.register_next_step_handler(message, canteen) elif message.text == 'Главная': # Возвращаемся в главное меню bot.send_message(message.chat.id, "Ты вернулся в главное меню", reply_markup=main_menu_markup()) bot.clear_step_handler_by_chat_id(chat_id=message.chat.id) else: bot.send_message(message.chat.id, "Пожалуйста, выбери день недели или 'Главная'.") bot.register_next_step_handler(message, canteen) @bot.message_handler(commands=['start']) def start(message): bot.send_message( message.chat.id, f'Привет, {message.from_user.first_name}!', reply_markup=main_menu_markup() ) bot.send_message(message.chat.id, 'Выбери, что бы ты хотел узнать:') @bot.message_handler(content_types=['text']) def main_handler(message): if message.text == 'Расписание уроков': # Показываем кнопки дней недели + "Главная" markup = types.ReplyKeyboardMarkup(resize_keyboard=True) markup.add('Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Главная') bot.send_message(message.chat.id, "Ты зашёл в меню «Расписание уроков»!") bot.send_message(message.chat.id, "Выбери день недели:", reply_markup=markup) bot.register_next_step_handler(message, rasp) elif message.text == 'Столовая': # Аналогично расписанию уроков, но для столовой markup = types.ReplyKeyboardMarkup(resize_keyboard=True) markup.add('Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Главная') bot.send_message(message.chat.id, "Ты зашёл в меню «Столовая»!") bot.send_message(message.chat.id, "Выбери день недели:", reply_markup=markup) bot.register_next_step_handler(message, canteen) elif message.text == 'Праздники, каникулы': # Отправляем фото и сообщение # (Замените 'holiday.png' на путь/название вашего файла, # или используйте урл/ByteIO, если у вас другое хранение) with open('holiday.png', 'rb') as photo: bot.send_photo(message.chat.id, photo) bot.send_message(message.chat.id, "Здесь будет ваше сообщение о праздниках/каникулах!") # Возвращаем пользователю те же кнопки главного меню bot.send_message(message.chat.id, "Главное меню:", reply_markup=main_menu_markup()) else: # Если нажали что-то не из меню, просто возвращаем в главное меню bot.send_message(message.chat.id, "Неизвестная команда. Возвращаю в главное меню:", reply_markup=main_menu_markup()) bot.polling(none_stop=True)
/start
или неизвестной команде выводится главное меню с тремя кнопками:
next_step_handler
.При необходимости можно дополнять логику, изменять тексты, пути к фотографиям, и т.д. Главное — структура и вызов bot.register_next_step_handler(message, нужная_функция)
сделаны так, чтобы разные разделы (расписание/столовая) не мешали друг другу, и чтобы при нажатии «Главная» пользователь возвращался на основной экран.
выскакивает Ты зашёл в меню «Расписание уроков»! фикс
Если вам не нужно, чтобы при нажатии «Расписание уроков» выводилось сообщение «Ты зашёл в меню «Расписание уроков»!», просто удалите или измените соответствующий вызов bot.send_message()
в обработчике.
Например, вот как можно убрать его полностью или заменить на более лаконичное сообщение:
python@bot.message_handler(content_types=['text']) def main_handler(message): if message.text == 'Расписание уроков': markup = types.ReplyKeyboardMarkup(resize_keyboard=True) markup.add('Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Главная') # Убрали «Ты зашёл в меню «Расписание уроков»!»: # bot.send_message(message.chat.id, "Ты зашёл в меню «Расписание уроков»!") # Оставили только одно сообщение: bot.send_message(message.chat.id, "Выбери день недели:", reply_markup=markup) bot.register_next_step_handler(message, rasp) elif message.text == 'Столовая': markup = types.ReplyKeyboardMarkup(resize_keyboard=True) markup.add('Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Главная') bot.send_message(message.chat.id, "Выбери день недели:", reply_markup=markup) bot.register_next_step_handler(message, canteen) elif message.text == 'Праздники, каникулы': # тут логика для праздников, фото и т.д. pass else: # любое другое сообщение возвращает в главное меню pass
Так бот не будет присылать фразу «Ты зашёл в меню «Расписание уроков»!», а сразу покажет кнопки выбора дня недели.
Если же вы хотите лишь поправить текст (к примеру, поменять кавычки), можете оставить эту строчку, но переписать её, например, так:
pythonbot.send_message(message.chat.id, "Вы выбрали меню 'Расписание уроков'!")
или
pythonbot.send_message(message.chat.id, "Вы находитесь в разделе «Расписание уроков».")
Таким образом вы устраните нежелательный текст или замените его на более подходящий.
отправляется сообщение "Ты зашёл в меню «Расписание уроков»!" нужно сделать чтобы было только "Расписание уроков"
Чтобы при нажатии кнопки «Расписание уроков» бот отправлял только одно сообщение «Расписание уроков» (и не отправлял «Ты зашёл в меню «Расписание уроков»!»), найдите соответствующее место в функции, которая обрабатывает нажатие кнопок (вероятно, это main_handler
), и измените эти строки:
pythonif message.text == 'Расписание уроков': markup = types.ReplyKeyboardMarkup(resize_keyboard=True) markup.add('Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Главная') # УДАЛИТЕ или закомментируйте старое сообщение: # bot.send_message(message.chat.id, "Ты зашёл в меню «Расписание уроков»!") # ИСПОЛЬЗУЙТЕ одно новое сообщение: bot.send_message(message.chat.id, "Расписание уроков", reply_markup=markup) bot.register_next_step_handler(message, rasp)
Если вам нужно, чтобы в этом же сообщении была подсказка «Выбери день недели:», можете объединить:
pythonbot.send_message(message.chat.id, "Расписание уроков\n\nВыбери день недели:", reply_markup=markup)
Таким образом бот будет отправлять только одно нужное вам сообщение (без лишнего текста) и показывать клавиатуру с днями недели.
фиксани в полном коде
Ниже приведён полный код, в котором убрано сообщение «Ты зашёл в меню «Расписание уроков»!» и вместо него выводится только «Расписание уроков». Аналогично для «Столовая» выводится одно сообщение. В остальном логика осталась прежней.
Обратите внимание, что в блоке «Праздники, каникулы» указан пример с отправкой картинки holiday.png
– при необходимости замените это на свой файл или URL.
pythonimport telebot from telebot import types TOKEN = 'ВАШ_ТОКЕН_СЮДА' bot = telebot.TeleBot(TOKEN) # Расписание уроков ponedelnik = [ "1. Разговоры о важном", "2. Литература", "3. Физика", "4. Геометрия", "5. Алгебра и Начало мат анализа", "6. Обществознание", "7. Русский язык" ] vtornik = [ "1. История", "2. География", "3. ОБЖ", "4. Физика", "5. Геометрия", "6. Литература", "7. Информатика" ] creda = [ "1. Информатика", "2. Русский язык", "3. Индивидуальный проект", "4. Алгебра и Начало мат анализа", "5. Физика", "6. Лабораторный практикум по физике", "7. Биология" ] chetverg = [ "1. Английский язык", "2. Обществознание", "3. История", "4. Литература", "5. Физкультура", "6. Информатика", "7. Алгебра и начало мат. анализа" ] pyanisa = [ "1. Английский язык", "2. Физика", "3. Информатика", "4. Геометрия", "5. Алгебра и начало мат. анализа", "6. Вероятность и статистика", "7. Химия" ] # Расписание столовой (пример; замените содержимое своими данными) canteen_ponedelnik = [ "Завтрак: ...\nОбед: ...\nПолдник: ...", "Другое блюдо, десерт..." ] canteen_vtornik = [ "Завтрак: ...\nОбед: ...\nПолдник: ...", "Другое блюдо, десерт..." ] canteen_creda = [ "Завтрак: ...\nОбед: ...\nПолдник: ...", "Другое блюдо, десерт..." ] canteen_chetverg = [ "Завтрак: ...\nОбед: ...\nПолдник: ...", "Другое блюдо, десерт..." ] canteen_pyanisa = [ "Завтрак: ...\nОбед: ...\nПолдник: ...", "Другое блюдо, десерт..." ] # Главное меню (функция для избежания дублирования кода) def main_menu_markup(): markup = types.ReplyKeyboardMarkup(resize_keyboard=True) item1 = types.KeyboardButton('Расписание уроков') item2 = types.KeyboardButton('Столовая') item3 = types.KeyboardButton('Праздники, каникулы') markup.add(item1, item2, item3) return markup # ----------------------------- # # Обработчики для подменю # # ----------------------------- # def rasp(message): """Обработка расписания уроков по дням недели""" if message.text == 'Понедельник': bot.send_message(message.chat.id, "\n".join(ponedelnik)) bot.register_next_step_handler(message, rasp) elif message.text == 'Вторник': bot.send_message(message.chat.id, "\n".join(vtornik)) bot.register_next_step_handler(message, rasp) elif message.text == 'Среда': bot.send_message(message.chat.id, "\n".join(creda)) bot.register_next_step_handler(message, rasp) elif message.text == 'Четверг': bot.send_message(message.chat.id, "\n".join(chetverg)) bot.register_next_step_handler(message, rasp) elif message.text == 'Пятница': bot.send_message(message.chat.id, "\n".join(pyanisa)) bot.register_next_step_handler(message, rasp) elif message.text == 'Главная': bot.send_message(message.chat.id, "Ты вернулся в главное меню", reply_markup=main_menu_markup()) bot.clear_step_handler_by_chat_id(chat_id=message.chat.id) else: bot.send_message(message.chat.id, "Пожалуйста, выбери день недели или 'Главная'.") bot.register_next_step_handler(message, rasp) def canteen(message): """Обработка расписания столовой по дням недели""" if message.text == 'Понедельник': bot.send_message(message.chat.id, "\n".join(canteen_ponedelnik)) bot.register_next_step_handler(message, canteen) elif message.text == 'Вторник': bot.send_message(message.chat.id, "\n".join(canteen_vtornik)) bot.register_next_step_handler(message, canteen) elif message.text == 'Среда': bot.send_message(message.chat.id, "\n".join(canteen_creda)) bot.register_next_step_handler(message, canteen) elif message.text == 'Четверг': bot.send_message(message.chat.id, "\n".join(canteen_chetverg)) bot.register_next_step_handler(message, canteen) elif message.text == 'Пятница': bot.send_message(message.chat.id, "\n".join(canteen_pyanisa)) bot.register_next_step_handler(message, canteen) elif message.text == 'Главная': bot.send_message(message.chat.id, "Ты вернулся в главное меню", reply_markup=main_menu_markup()) bot.clear_step_handler_by_chat_id(chat_id=message.chat.id) else: bot.send_message(message.chat.id, "Пожалуйста, выбери день недели или 'Главная'.") bot.register_next_step_handler(message, canteen) # ----------------------------- # # Основные хендлеры # # ----------------------------- # @bot.message_handler(commands=['start']) def start(message): """Первый запуск бота или команда /start""" bot.send_message( message.chat.id, f'Привет, {message.from_user.first_name}!', reply_markup=main_menu_markup() ) bot.send_message(message.chat.id, 'Выбери, что бы ты хотел узнать:') @bot.message_handler(content_types=['text']) def main_handler(message): """Обрабатывает нажатия основных кнопок главного меню.""" if message.text == 'Расписание уроков': # Создаём клавиатуру с днями недели markup = types.ReplyKeyboardMarkup(resize_keyboard=True) markup.add('Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Главная') # Только одно сообщение «Расписание уроков»: bot.send_message(message.chat.id, "Расписание уроков", reply_markup=markup) # После этого бот ждёт выбора дня недели в функции rasp bot.register_next_step_handler(message, rasp) elif message.text == 'Столовая': # Аналогичный подход для столовой markup = types.ReplyKeyboardMarkup(resize_keyboard=True) markup.add('Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Главная') bot.send_message(message.chat.id, "Столовая", reply_markup=markup) # После этого бот ждёт выбора дня недели в функции canteen bot.register_next_step_handler(message, canteen) elif message.text == 'Праздники, каникулы': # Пример отправки изображения (holiday.png) и сообщения # Замените holiday.png на свой файл, если нужно with open('holiday.png', 'rb') as photo: bot.send_photo(message.chat.id, photo) bot.send_message(message.chat.id, "Здесь будет ваше сообщение о праздниках/каникулах!") # Показываем снова главное меню bot.send_message(message.chat.id, "Главное меню:", reply_markup=main_menu_markup()) else: # Если ввели что-то другое — возвращаем в главное меню bot.send_message( message.chat.id, "Неизвестная команда. Возвращаю в главное меню:", reply_markup=main_menu_markup() ) bot.polling(none_stop=True)
bot.send_message(message.chat.id, "Ты зашёл в меню «Расписание уроков»!")
,pythonbot.send_message(message.chat.id, "Расписание уроков", reply_markup=markup)