Найти тему
Computer Pro

Чат-бот для трекинга привычек. Старт проекта

Оглавление

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

Пока очень смутно представляю что это такое будет. Вроде бы прочитал техническое задание, что-то понял, а что-то не очень. Для того и пишу данную статью чтобы "устаканить" свои мысли по поводу написания программы. Итак, техническое задание (довольно таки объемное):

Разработайте сервис, дающий пользователям возможность эффективно управлять своими привычками через бот в Telegram.

Функционал приложения

Основные функции приложения на стороне frontend (телеграм-бот):

  • добавление и удаление привычек, полный функционал по редактированию;
  • функция фиксации выполнения привычки: выполнил / не выполнил;
  • напоминание о необходимости выполнить привычку с фиксацией.

Основная функция сервисного скрипта: оповещение пользователя в заданный/назначенный отрезок времени.

Основные функции приложения на стороне backend (FastAPI):

  • хранение и обработка данных, полученных от пользователя (запросы из телеграм-бота);
  • аутентификация и авторизация телеграм-бота для доступа к данным.

Что предстоит реализовать

  1. Телеграм-бот. Этот слой используется как фронтенд-составляющая сервиса. Он нужен для доступа пользователей к своим привычкам, а также обеспечивает полный функционал по их редактированию.
  2. Сервис аутентификации. Этот слой отвечает за методы работы с привычками со стороны FastAPI. Он реализует основные методы CRUD, используемые пользователями через телеграм-бота. Он также обеспечивает авторизацию действий пользователя в момент запроса к базе данных.
  3. Механизм переноса привычек: список привычек дублируется на следующий день, привычки удаляются из списка после их проработки. Подробнее работа механизма описана в разделе «Основные функциональные требования».
  4. Сервисный скрипт оповещений, работающий в фоновом режиме. Уведомляет пользователя о текущем списке привычек в заданный момент времени.
  5. В качестве базы данных используется связка: PostgreSQL — SQLAlchemy — Alembic.
  6. Приложение запускается средствами Docker-compose.

Основные функциональные требования

  1. Архитектура проекта. В ходе реализации frontend- и backend-частей приложения структура папок проекта должна соответствовать архитектурным решениям MVP/MVC.
  2. Аутентификация. Реализуйте безопасную аутентификацию пользователей через токен, полученный от FastAPI и интегрированный с ботом на платформе Telegram.
  3. Управление привычками. Обеспечьте пользователям возможность создавать, просматривать, редактировать и удалять свои ежедневные привычки.
  4. Трекинг выполнения. Добавьте функционал для отметки выполнения привычек на текущий день. Пользователь может отмечать каждую привычку как выполненную или не выполненную.
  5. Перенос невыполненных привычек. Исходя из распространённого мнения о необходимости 21 дня для привития новой привычки (число можно указать в настройках), дублируйте список привычек на следующий день, оставляя только те, что выполнялись менее 21 раза.
  6. Уведомления. Реализуйте систему уведомлений для напоминания пользователям отмечать выполнение привычек. Можно использовать отдельный демон-сервис, запускаемый через планировщик задач, или воспользоваться предложенной библиотекой из технологического стека.

Технологический стек

В ходе реализации используйте следующий стек технологий:

  • Poetry.
  • PostgreSQL.
  • SQLAlchemy.
  • Alembic.
  • PytelegramBotAPI.
  • FastAPI.
  • PyJWT (по желанию).
  • Apscheduler (по желанию).
  • crontab (по желанию).
  • Docker-compose.

Используйте pyTelegramBotAPI для взаимодействия с пользователями через платформу Telegram.

Реализуйте серверную часть с использованием FastAPI для обеспечения взаимодействия бота с базой данных PostgreSQL.

Используйте SQLAlchemy для работы с базой данных и Alembic для управления миграциями.

Требования к коду

  • Код должен соответствовать РЕР 8.
  • Имена методов и функций должны содержать глагол действия.
  • Имена переменных и функций всегда должны быть развёрнутыми. Избегайте явных сокращений слов и однобуквенных переменных.
  • Должно быть предусмотрено хранение паролей в хешированном виде.
  • Приложение должно запускаться и работать через команду docker-compose up.

================КОНЕЦ ТЗ==================

С чего начать?!

Чтобы успешно решить эту задачу, рекомендуем обратить внимание на материалы модулей 20, 21, 26 и 27 курса Python Advanced. В них освещаются основы работы с FastAPI, PostgreSQL и SQLAlchemy Alembic.

Базируясь на этих знаниях я и буду создавать своего бота.

Первого и последнего бота (по поиску отлей на hotels.com) я закончил очень давно в марте (кажется) 2023 года. Было не легко.

Телеграмм-бот на Python по поиску отелей при помощи API Hotels.com
Computer Pro17 сентября 2023

Надеюсь на базе той информации + полученная инфа по курсу Python Advanced поможет решить эту задачу гораздо быстрей, нежели я делал того бота.

-2

Ну вот, новый проект в Pycharm создан, новый бот в BotFather так же создан (получен токен для доступа к боту).

-3

По техническому заданию нужно использовать FastAPI для управления ботом поэтому начну с установки только необходимых пакетов (см. выше, в ТЗ, их список. Для начала установлю:

  • SQLAlchemy.
  • PytelegramBotAPI.
  • FastAPI.

На базе этих пакетов обеспечу минимально возможный функционал бота.

-4

Да, нам предлагается за основу бота взять готовую структуру и на ее базе делать свой проект.

Чтож, я не собираюсь изобретать велосипед и запускаю "git clone https://gitlab.com/dmitry_lokhanin/structure_example.git" из корневой директории моего проекта:

-5

Структура бота очень похожа на то что я когда-то делал.

-6

Да, судя по шаблону для ключей к боту и сайту hotels.com, это та же самая структура что и бот по поиску отелей:

-7

Ключ для бота я введу а этот, второй пусть пока полежит, вдруг пригодится! Так же сразу переименовал файл .env.template в .env и пошел вспоминать структуру проекта который писал два года назад...

main.py

-8

loader.py

-9

А вот в config.py возникли первые проблемы, пакет dotenv подсвечен красным:

-10

Установка pip install dotenv выдала ошибку:

-11

Потому что недостаточно написать имя пакета dotenv, надо его написать прааааавильно: python-dotenv!!!

-12

Вроде бы все нестыковки завершены, можно попробовать запустить бота... Но что-то мне подсказывает - не всё я еще устранил, ну да ладно - пуск!

Хм, бот запустился, но ни сообщений в консоли, ничего... Ладно, думаю, у меня же логгирование еще никак не налажено, может так и должно, пошел в телегу запускать бота там... Нажал несколько раз /start... ничего... спустя секунд 10 вылетело "эхо":

-13

Ну значит, что-то в этом боте уже работает, но Пайчарм меня озадачил ошибками:

-14

Посмотрю, чего в моём боте по поиску отелей насчет таймаута написано...

А ничего в моем старом проекте об этом не написано, интернеты говорят мол надо сделать так:

-15

Что, кажется сработало и ошибка ушла...

Ну вот, собственно начало боту положено. Бот работает, реагирует эхом на ввод текста...

-16

Теперь его нужно как-то под FastAPI заточить, но это уже в следующих статьях. А я продолжу пока делать 28 HW и изучать основы Web-вёрстки.

P.S. Вроде всё минимально заработало а отправить на гит-сервер не получилось, так как у проекта который я клонировал и взял за основу тоже имеется внутри директория .git и они с моей директорией начали конфликтовать. Пришлось удалить директорию .git из папки structure_example. Затем все содержимое этой папки перекинуть в корень проекта (так даже лучше смотрится) и только после этого я смог запушить на сервер все свои сегодняшние наработки:

-17