ТГ помощник на Python, который нельзя обмануть

На самом деле можно, а зачем?) Но обо всем по порядку.

В новогодние праздники подумалось, что пора начать пилить пет проект. Сам работаю продактом и уже пора бы.

Ну, а т.к. сейчас все про ИИ на каждом шагу – решил сделать с его помощью, поскольку разбираюсь в разработке, но кодить не умею, т.е. есть общее понимание процессов.

Пишу ему, а давай ка запилим петпроект мне. И он как выдал идеи на основе моих к нему прежних обращений. Это уже было перебор. Подкрутив запрос, я получил оптимальный вариант – тг бот.

Ну и главный вопрос – чтобы что? этот бот будет. А у меня сразу появилась проблема личная, которую нужно решать – дисциплина. Не жесткое выполнение задач, а хотя бы не сливать какие-то рутинные задачи. Вот и началась формулировка идеи.

Бот, который помогает не сливать некоторые задачи. Любые. И всего один фокус для пользователя. Без фанатизма. И с игровой и мотивирующей составляющей для легкого ведения прогресса. Задачи типа зарядки, работы над пет-проектом, обучения

Понятно, что таких сервисов много, но хотелось без регистраций и смс, и чтобы аппку новую не ставить, а все в мессенджере.

Пилил по несколько часов в день. Общий итог – месяц. Это включая выбор площадки хостинга, переезд на другую площадку и параллельно обвешивание фичами.

В итоге сам сейчас пользуюсь – помогает, ну и забавная штука в итоге вышла. В целом доволен.

Вот собственно сам бот: https://t.me/focuscompanion_bot

По функционалу, что умеет:

  • Утром напоминает о главном фокусе на день. Вечером просит отметить результат: сделано, частично, не сделано.
  • Ведёт недельную статистику и показывает, сколько дней подряд держишься по текущей цели.
  • Даёт ачивки за серии выполненных дней и прогресс по уровням.
  • Позволяет сменить фокус и время уведомлений командами меню.

В итоге вышел хороший локальный помощник.

Структура проекта локально:

  • bot.py — основная логика бота и хендлеры.
  • db.py + models.sql — работа с SQLite и схема БД.
  • config.py — чтение .env и конфиг.
  • discipline.db — база.
  • requirements.txt — зависимости.
  • Папка images — в том числе приветственный экран бота.

Рабочий цикл разработки:

Пишу/меняю код локально.

Тестирую бота у себя на ноуте, потом пушу в гит, затем по ssh обновляю файлы и перезапускаю процесс: онбординг, /time, /week, /streak, /achievements, /feedback, работу утренних и вечерних уведомлений.

За всё время набралось 49 коммитов — от мелких правок текста до переделки логики ачивок и расписания. Сейчас уже более 1000 строк кода, и ИИ уже не переваривает весь файл когда что-то правим. Пишу все в блокноте. Наверное можно сразу на гите править, но мне надо сначала локально. Вероятно для этого тоже есть инструмент какой-то, это со временем.

ТГ помощник на Python, который нельзя обмануть

Стек и архитектура

  • Python 3.12
  • aiogram 3 (асинхронный Telegram‑фреймворк)
  • SQLite в качестве хранилища
  • APScheduler для периодических задач (утренние и вечерние уведомления по часовым поясам)
  • systemd‑service для запуска на сервере
  • Код полностью на async/await, онбординг и настройки сделаны через FSM aiogram.

Часовые пояса сейчас заточены под РФ: пользователь выбирает зону, дальше уведомления приходят по его локальному времени.

APScheduler раз в минуту проверяет, кому пора прислать утренний фокус, а кому — вечерний чек‑ин.

Деплой на VDS Timeweb (до этого был другой хостинг именно для ботов, который постоянно кешировал данные и при глюках запускал по нескольку версия, в итоге перешел на более профессиональный, где нет UI и все через терминал)Про хостинг могу отдельно рассказать, если будет интересно, это целая история. Изза глючного хоста столько дров наломал - если бы пошел сразу в нормальный сервер - неделю бы сэкономил точно. В этот период с токеном от ТГ хапнул хлопот, но ничего все решил.

Процесс деплоя (долго привыкал, но в итоге настроил под себя):

Код лежит в приватном репозитории на GitHub.

Локально делаю изменения → git commit → git push.

На сервере в каталоге проекта — git pull, обновление pip install -r requirements.txt при необходимости и миграция схемы через models.sql.

Бот крутится как discipline-bot.service под systemd, так что достаточно перезапустить сервис или запустить скрипт деплоя.

ТГ помощник на Python, который нельзя обмануть

Что дальше:

Сейчас сам бот уже помогает не помнить свои мини‑цели пользователям. В планах с десяток фичей, которые отприоретизировал пока по своим ощущениям и по обратной связи от юзеров. Дополнительно планируется:

  • переехать с SQLite на PostgreSQL;
  • добавить более подробную статистику по неделям и месяцам;
  • доработать систему ачивок и уровней сложности;
  • возможно, сделать экспорт данных или веб‑панель.

В итоге получился более-менее рабочий продукт, который уже и не стыдно показать) Буду и дальше его развивать, т.к. почти бесплатно, да и, как оказалось, интересно.

И да, напомню, весь код я писал вместе с ии, как и, собственно, проектировал архитектуру, логику и выбирал решение. Т.е. совсем вообще с нуля, т.к. знаком с этим только теоретически.

ТГ помощник на Python, который нельзя обмануть

Самое сложное было это вынести бота онлайн, чтобы он работал не с локальной машины, а с сервера (сейчас уже кажется что это банальнейшая вещь конечно). А самая сложная фича – это выбор пользователем его часового пояса, потому что автоматически это пока не понятно как сделать.

Если вы хотите более‑менее регулярно делать то, что сами себе обещаете (или просто протестировать прикольный бот со сложной механикой) - буду рад, если попробуете бота и напишете фидбек через команду /feedback внутри

ПС Продакт маркет фит пока не искал, это следующая часть проекта. Пока смотрю, как бот живет, собираю обратную связь.
И сейчас все также, но уже не 100% а примерно 90%, тк сам разобрался, вопросов решаю с помощью ИИшки. Круто же)

ППС Кстати, пользуясь им можно понять, как все-таки его обмануть, но не хочется. Потому что если обманешь, то только себя)

Всем спасибо - всем добра! За критику и обратную связь заранее спасибо! Задавайте вопросы.

1
1 комментарий