Найти в Дзене
Computer Pro

Трекер привычек. Fastapi + pyTelegramBotAPI. Часть 1

Этот цикл статей - лайвкодинг, чем закончится, я пока не знаю. Для того и пишу статью, чтобы записывать те шаги, что выполняю при проектировании приложения. Чтобы в процессе написания статьи, самому стало понятно, что делать дальше. Давно я взялся за эту задачу, написать чат-бот "Трекер привычек", но были другие задачи и эта отошла далеко на задний план. В пятницу 07.03.25 защитил свой дипломный проект: Волновался прямо таки как школьник на экзамене. Хотя, по большому счету, эта защита совершенно ничего не даёт кроме опыта. Теперь можно вернуться к когда-то начатому проекту. Ну да ладно. Это было небольшое отступление от темы... Я долго не мог понять как же мне связать FastAPI и pyTelegramBotAPI, как они должны взаимодействовать, с чего начать проектировать своё приложение. В процессе поиска сначала залез в вебхуки, потом в вебсокеты, от которых я попал на JavaScript и даже написал небольшое приложение для работы с вебсокетами: Но всё это было не то, но как опыт - бесценно! В будущем
Оглавление
Фото для карточки. Лето 2021. Северная Двина. с.Красноборск. фото Автора
Фото для карточки. Лето 2021. Северная Двина. с.Красноборск. фото Автора
Этот цикл статей - лайвкодинг, чем закончится, я пока не знаю. Для того и пишу статью, чтобы записывать те шаги, что выполняю при проектировании приложения. Чтобы в процессе написания статьи, самому стало понятно, что делать дальше.

Давно я взялся за эту задачу, написать чат-бот "Трекер привычек", но были другие задачи и эта отошла далеко на задний план. В пятницу 07.03.25 защитил свой дипломный проект:

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

Ну да ладно. Это было небольшое отступление от темы...

Техническое задание трекера привычек

Я долго не мог понять как же мне связать FastAPI и pyTelegramBotAPI, как они должны взаимодействовать, с чего начать проектировать своё приложение. В процессе поиска сначала залез в вебхуки, потом в вебсокеты, от которых я попал на JavaScript и даже написал небольшое приложение для работы с вебсокетами:

Но всё это было не то, но как опыт - бесценно! В будущем пригодится.

Начальная структура проекта

Данный проект начинается с того, что сразу будет разделение на: frontend_dir, backend_dir, config.py и main.py

-3

Запуск проекта начинается с запуска фронтенда, бот-поллинга. В процессе написания статьи код будет постоянно рефакториться. Это самый простой код, что описан в документации на pyTelegramBotAPI. Дабы просто заставить бота отвечать, далее будет изменён.

-4

Ну и соответственно в телеге можно увидеть результат работы:

-5

Штука то эта работает но в консоли ничего не происходит. Надо добавить логгирование, да и вообще обернуть запуск бота в функцию main(), получился вот такой рефакторинг:

-6

Теперь и в консоли есть какие-то оповещения, и код выглядит более презентабельно.

Как связать фронтенд telegram с приложением FastAPI?

Для этого, на бэкенде, я создам эндпойнт /users/me, который бы возвращал информацию о текущем пользователе. Но так как ни моделей, ни базы данных в приложении пока нет, это будет простая "заглушка", возвращающая словарь, с какими-то данными:

-7

Запущу из командной строки, из корневой директории проекта:

с обязательным указанием директории приложения
с обязательным указанием директории приложения

Теперь в боте нужно сделать обработчик события, который бы послал запрос к этому эндпойнту и получил от него данные. Так как эхо-хэндлер мне больше не нужен - вместо него напишу обработчик about_me:

-9

Ну вот, решил самый сложный вопрос - как же связываются FastAPI и телеграм-бот!

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

Слава Богу!