Напоминалка почти готова, но падает от любого кривого ввода. Написал «привет» вместо «5 текст», и бот свалился. Сегодня добавим проверку, подсказку и соберём надёжную Бот-Напоминалку. Это артефакт модуля и реально полезный бот, которым будешь пользоваться сам.
После урока сможешь: объяснить тему «Собираем Бот-Напоминалку» и выполнить связанный с ней учебный шаг без подсказки.

Проверяем ввод
Перед разбором сообщения убедимся, что оно правильное. Нужно два условия: частей должно быть две, и первая часть должна быть числом.
parts = message.text.split(maxsplit=1)
if len(parts) < 2 or not parts[0].isdigit():
bot.send_message(message.chat.id, "Не понял. Напиши число минут и текст. Например: 5 попить воды")
return
len(parts) < 2 это «частей меньше двух», человек написал одно слово без текста. not parts[0].isdigit() это «первое слово не число». Между ними or, «или»: если сработало хоть одно, ввод кривой. Бот показывает формат и делает return, то есть выходит, ничего не планируя. Падения нет.
Подсказка на старте
@bot.message_handler(commands=['start'])
def start(message):
bot.send_message(message.chat.id, "Привет! Я напомню о деле. Напиши: сколько минут и о чём. Например: 5 позвонить маме")
Маленькая забота, а человеку сразу понятно, что делать.
Полный код Бот-Напоминалки
import telebot
import threading
from config import TOKEN
bot = telebot.TeleBot(TOKEN)
def napomnit(chat_id, text):
bot.send_message(chat_id, f"Напоминаю: {text}")
@bot.message_handler(commands=['start'])
def start(message):
bot.send_message(message.chat.id, "Привет! Я напомню о деле. Напиши: сколько минут и о чём. Например: 5 позвонить маме")
@bot.message_handler(func=lambda message: True)
def planirovat(message):
parts = message.text.split(maxsplit=1)
if len(parts) < 2 or not parts[0].isdigit():
bot.send_message(message.chat.id, "Не понял. Напиши число минут и текст. Например: 5 попить воды")
return
minut = int(parts[0])
text = parts[1]
threading.Timer(minut * 60, napomnit, args=[message.chat.id, text]).start()
bot.send_message(message.chat.id, f"Хорошо! Напомню через {minut} минут: {text}")
bot.infinity_polling()
Запусти, нажми /start, поставь напоминание на минуту, а потом нарочно напиши «привет». Бот вежливо поправит, но не упадёт. Так и должен вести себя надёжный бот.
Честная оговорка: будильники живут в памяти бота. Если программа перезапустится, все напоминания пропадут, как пропадала память в угадайке. Для учебного бота это нормально. Чтобы напоминания переживали перезапуск и срабатывали точно по часам, есть более серьёзные инструменты, но это уже за рамками нашего курса.
Сделай бота своим
- добавь команду показать текущее время;
- сделай фразы напоминания весёлыми или строгими, на твой вкус;
- придумай боту имя и характер.
Контрольный вопрос. Каким методом строки проверяют, что первое слово — это число? Напиши имя: parts[0].____().
Подсказка: «10».isdigit() вернёт True.
Онлайн-проверка ответа появится позже
Задание. Собери свою Бот-Напоминалку: подсказка формата на /start, формат «минуты текст», подтверждение, напоминание в срок, защита от кривого ввода. Добавь свой штрих. Пришли короткое видео: ставишь напоминание и получаешь его в срок.
Подсказка: Сначала проверь len(parts) < 2 or not parts[0].isdigit() и сделай return при ошибке. Иначе заводи Timer на minut*60.
✅ Готово, если: ты ввёл(а) верный ответ, и онлайн-проверка его приняла.
Онлайн-проверка ответа появится позже
Зачёт, если:
✅ бот запускается без красных ошибок;
✅ напоминание приходит в срок, бот пишет первым, текст и время задаёшь ты, на кривой ввод бот не падает;
✅ добавлен свой штрих;
✅ прислано видео: ставишь напоминание и получаешь его в срок.
