учебный путь · python

Telegram-бот «Ритм»

  • Python
  • Средний
  • 5 модулей
  • 23 задач
  • Premium

Соберите бота, который держит ваши привычки: разбор команд, журнал отметок, серии, календарь месяца и утренний дайджест. Каждая задача — модуль бота, финал — работающий бот на чистом Python: свой токен, python3 main.py, и «Ритм» отвечает в Telegram.

AI-ассистент ведёт подсказками, но решение не выдаёт
Первый модуль бесплатный — карта не нужна
intro

Что тебя ждёт в этом пути

Автор программы:

Что ты построишь

Рабочий Telegram-бот на чистом Python, без единой сторонней библиотеки. Ты напишешь разбор команд /done и /track с датами вида «вчера» и 12.08, журнал отметок с защитой от дублей, расчёт серий с рекордами и заморозками, календарь месяца прямо в сообщении и утренний дайджест. В финале соберёшь модули в маршрутизатор, возьмёшь токен у @BotFather, запустишь python3 main.py — и «Ритм» ответит в твоём Telegram. Состояние переживает перезапуск: книга привычек хранится в JSON.

Для кого

Ты знаешь базовый Python — функции, словари, списки — и хочешь довести код до вещи, которой пользуешься сам, а не до зелёной галочки в тренажёре. Опыт с Telegram Bot API не нужен: транспорт уже написан, твои модули — разбор, данные и логика.

Чему научишься

  • Разбор команд: /done@ritm_bot, аргументы, относительные и числовые даты
  • Канонизация пользовательского ввода и коды ошибок вместо падений
  • Журнал отметок: инварианты, идемпотентность, снимки для JSON
  • Серии: текущая, личный рекорд и серия с заморозками
  • Генераторы дат, ISO-недели и календарная математика через границы месяцев
  • Тексты бота: склонение числительных и тепловая карта месяца символами
  • Сборка: маршрутизатор апдейтов, состояние чатов, long polling на urllib
Результат проекта

Что вы получите: бота «Ритм»

После финальной задачи у тебя будет рабочий Telegram-бот: он отмечает привычки, считает серии, показывает календарь и сам присылает утренний план.

  • Команды без дублей. «Ритм» понимает «сегодня», «вчера» и даты, а повторная отметка не создаёт дубль.
  • Серии и заморозки. Бот считает текущую серию и личный рекорд, а пропущенный день можно защитить заморозкой.
  • Календарь и дайджест. В сообщении видно весь месяц, а утром приходит короткий план на день.
  • Твой код и твои данные. Чистый Python без сторонних библиотек, привычки хранятся в JSON и переживают перезапуск.
curriculum

Задачи пути — 5 модулей, 23 задач

Каждый модуль — навык. Решаешь задачи по порядку, и к финалу из них собирается рабочий результат.

1.1
Разбор команды
Превратите сырое сообщение Telegram в имя команды и аргументы — входная дверь бота «Ритм»
1.2
Каноническое имя привычки
Приведите название привычки к единому виду, чтобы «/done Йога» и «/stats ЙОГА» попадали в одну запись
1.3
Дата из аргумента команды
Разберите «вчера», «12.08» и «29.02.2024» в ISO-дату — бот «Ритм» принимает отметки задним числом
1.4
Аргументы отметки
Разделите «/done утренняя зарядка вчера» на название привычки и дату — без кавычек и подсказок от пользователя
1.5
Таблица команд
Опишите команды бота таблицей и отсеките всё кривое на входе — дальше обработчики получают только корректные вызовы
2.1
Отметка за день
Поставьте и снимите отметку в журнале привычки так, чтобы повторное нажатие ничего не ломало
2.2
Обход дней периода
Напишите генератор, который выдаёт все дни периода по одному — на нём стоит вся статистика бота
2.3
Отметки по неделям
Разложите журнал привычки по ISO-неделям — там, где 29 декабря уже относится к следующему году
2.4
Статистика за период
Посчитайте «отмечено 5 из 7» и «лучше всего идёт по вторникам» — без деления на ноль и с честной ничьей
2.5
Книга привычек
Соберите состояние чата: привычки, журналы, защитные копии и снимок в JSON — то, что бот держит между сообщениями
3.1
Серия как значение
Сделайте серию значением: len(), сравнение, хеш и печать — три способа посчитать серию вернут именно её
3.2
Текущая серия
Посчитайте живую серию привычки: вчерашняя отметка её держит, позавчерашняя — уже нет
3.3
Личный рекорд
Найдите личный рекорд привычки: самую длинную серию за всю историю, а при ничьей — самую свежую
3.4
Серия с заморозками
Дайте серии право на пропуск: заморозка прикрывает день, а когда бюджет кончился — серия обрывается
3.5
Привычки под угрозой
Соберите список для вечернего напоминания: серия жива, но сегодня не отмечено — и терять её больнее всего
4.1
Дата по-человечески
Печатайте даты как человек: «вчера», «12 августа», а год — только если он не этот
4.2
Русская плюрализация
Выберите форму слова под число: 1 день, 2 дня, 5 дней, но 11 дней и 21 день
4.3
Карточка привычки
Соберите ответ на /stats: серия, рекорд, всего отметок и доля за месяц — из готовых расчётов в одну карточку
4.4
Тепловая карта месяца
Нарисуйте месяц сеткой недель: выравнивание по дню недели первого числа и добивка пустыми клетками
4.5
Утренний дайджест
Соберите утреннее сообщение бота: приглашение, похвала или точечный список того, что сегодня можно потерять
5.1
Разбор апдейта
Достаньте чат и текст из произвольного апдейта Telegram — и не уроните бота на отсутствующем ключе
5.2
Состояние чатов
Соберите состояние бота: книга привычек на чат, живые объекты для обработчиков и снимок, переживающий JSON
5.3
Бот «Ритм» целиком капстоун
Соберите маршрутизатор и обработчики команд — и получите бота, которого запускаете своим токеном
Путь входит в Koddo Premium Открой все премиум-пути, AI-ассистента без лимитов и daily challenge. от 490 ₽ / мес
koddo start python-habit-bot

Готов начать этот путь?

Зарегистрируйся — откроем путь прямо на первой задаче. Без установки и настройки, всё в браузере.