Бот умеет писать сам через паузу, но пауза и текст пока зашиты в код. Сделаем по-настоящему: пусть человек сам говорит, через сколько минут напомнить и о чём. Бот разберёт это из сообщения и заведёт будильник.
После урока сможешь: объяснить тему «Через сколько и о чём» и выполнить связанный с ней учебный шаг без подсказки.
Договоримся о формате
Чтобы бот понял тебя, нужен простой уговор. Сделаем так: первое слово это число минут, остальное это текст напоминания. Например, 10 сделать уроки значит «через 10 минут напомни сделать уроки».
Разбираем сообщение
Нам надо отрезать первое слово от остального. В Python для этого есть split. Команда split(maxsplit=1) режет строку только в первом пробеле, на две части:
parts = message.text.split(maxsplit=1)
minut = int(parts[0])
text = parts[1]
message.text.split(maxsplit=1)для «10 сделать уроки» вернёт два куска:"10"и"сделать уроки". Безmaxsplit=1текст рассыпался бы на слова.parts[0]это число минут, но пока текст «10», поэтомуint(...)делает из него число 10.parts[1]это сам текст напоминания.
Заводим будильник на минуты
Таймер считает в секундах, а человек говорит в минутах. Умножим минуты на 60:
threading.Timer(minut * 60, napomnit, args=[message.chat.id, text]).start()
minut * 60 переводит минуты в секунды. 10 минут это 600 секунд. Будильник заведён, бот свободен.
Собираем
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(func=lambda message: True)
def planirovat(message):
parts = message.text.split(maxsplit=1)
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()
Запусти, напиши 1 попить воды. Бот подтвердит, а через минуту сам пришлёт «Напоминаю: попить воды». Ставь маленькие минуты для проверки, не жди час.
Заметил слабое место? Если написать боту просто «привет», без числа впереди, он попробует превратить «привет» в число и упадёт. Чинить это будем в следующем уроке.
Контрольный вопрос. Первое слово (число минут) отделяют от текста методом split(____=1). Напиши имя аргумента.
Подсказка: split(maxsplit=1) режет строку в первом пробеле.
Онлайн-проверка ответа появится позже
Задание. Сделай обработчик, который разбирает «минуты текст» через split(maxsplit=1), заведи будильник на minut * 60 секунд и подтверди приём. Поставь напоминание на 1 минуту и дождись его.
Подсказка: split(maxsplit=1) даёт две части: число минут (через int) и текст. Таймер — на minut*60.
✅ Готово, если: ты ввёл(а) верный ответ, и онлайн-проверка его приняла.
Онлайн-проверка ответа появится позже
Зачёт, если:
✅ бот разбирает «минуты текст» через split(maxsplit=1) и подтверждает приём;
✅ напоминание приходит в срок (проверено на 1 минуте).
