Через сколько и о чём

Бот умеет писать сам через паузу, но пауза и текст пока зашиты в код. Сделаем по-настоящему: пусть человек сам говорит, через сколько минут напомнить и о чём. Бот разберёт это из сообщения и заведёт будильник.

После урока сможешь: объяснить тему «Через сколько и о чём» и выполнить связанный с ней учебный шаг без подсказки.

Договоримся о формате

Чтобы бот понял тебя, нужен простой уговор. Сделаем так: первое слово это число минут, остальное это текст напоминания. Например, 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 минуте).

Назад  ·  ↑ В начало урока  ·  ⌂ В начало курса  ·  Вперёд →

Школа Виктора Комлева