Skip to content

Central-University-IT-prod/public-backend-AntonRls

Repository files navigation

Бот в телеграм

Бот доступен под логином antontravel_bot

Инструкция по запуску

Устройство docker-compose.yml

version: '3'
services:
  travelbot:
    build: .
    command: python main.py
    restart: always

    volumes:
      - "/DB/"

База данных хранится в директории DB, для этого мы указываем её в volumes, чтобы сохранить при перезагрузке. Помимо docker-compose.yml, создан Dockerfile

FROM python:3.11


COPY requirements.txt requirements.txt
RUN pip3 install -r requirements.txt
COPY . .

CMD ["python", "main.py"]

Из него мы устанавливаем все зависимости, которые требуются для работы бота

Запуск бота

Достаточно перейти в корень проекта и написать команду

docker compose up -d

Запуск бота на прямую

  1. Перейдите в корневую директорию
  2. Установите все зависимости pip3 install -r requirements.txt
  3. Запустите файл main.py в корне проекта: python main.py

Запуск UNIT тестов

Перейдите в корень проекта и введите команду python -m unittest discover -s tests

Демонстрация работы бота

Первое посещение

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

Главное меню

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

image

✏️ Добавить путешествие

Данный раздел запрашивает первоначальные данные для путешествия и создаёт его

🌃 Мои путешествия

Пользователю присылается список путешествий, в которых он состоит. Нажав на список путешествий, ему открывается панель управления путешествием

image

Панель управления путешествием

image

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

Добавление локаций

Бот просит ввести страну и город, а так-же дату посещения локации. После добавления локаций, он сортирует все локации в порядке возрастания по дате посещения

Просмотр локаций

Бот выводит информацию о локации, сколько дней займёт её посещение, а так-же из него можно посмотреть различную полезную информацию, например погоду, отели в этом городе и так далее

image

Управление путешествием

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

🗂 Биржа путешествий

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

📱 Мой профиль

Управление профилем пользователя. Редактирование интересов, личных данных и так далее

Описание внешних интеграций

Получение информации о локациях

Для этой задачи используется сервис OpenStreetMap, у него есть открытый метод, который позволяет получить координаты и полную информацию по названию страны и города

https://nominatim.openstreetmap.org/search?q={name}&format=json&adressdetails=1

Этот метод полностью бесплатный, и на него не распространяются какие-либо ограничения. Именно поэтому он был выбран

Получение прогноза погоды

У Yandex есть страница, на которой размещён прогноз погоды на весь год, для заданных координат

https://yandex.ru/pogoda/month/june?lat=55&lon=55&via=cnav

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

Построение маршрута

Была проведена колоссальная работа в данном направлении. После чательного анализа, самым оптимальным вариантов для решения текущей задачи показалось внедрение карты с уже построенным маршрутом прямо в Telegram. В Telegram есть возможность отобразить содержимое сайта в Webview, который открывается внутри бота. За основу было взято API по построению веб версии Яндекс карты. Нужные данные подставляются в ссылку, а затем данная ссылка загружается в WebView Telegram и отображается пользователю внутри бота:

https://yandex.ru/maps/?rtext=59.967870,30.242658~59.898495,30.299559&rtt=mt

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

Получение информации по отелям & кафе & достопримечательностям

В решении текущей задачи так-же использовалось API по построению веб версии Яндекс карты и отображение результата в WebView, прямо так-же, как это указано в пункте Построение маршрута

https://yandex.ru/maps/?ll={cords[1]},{cords[0]}&z=16&text=кафе и рестораны

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

СУБД

В качестве СУБД была выбрана SQLite. Для текущей задачи она является самой оптимальной, вот почему

  1. Большое количество данных в проекте будет получаться из API других сервисов, и соотвественно масштабной базы данных просто не потребуется
  2. Низкая требовательность к ресурсам. Так-как масштабной базы данных нам не потрбуется, то рациональнее будет выбрать ту, которая не ест много ресусов. SQLite вовсе хранится в файле и максимальна проста в развёртывании
  3. Быстрый доступ к данным. Это один из самых важных аспектов при разработке бота - чем он быстрее отвечает, тем счасливее пользователь

Cхема базы данных Схема базы данных

Описание модели данных и связи между ними

Название таблицы Основное назначение С какими таблицами связана
Users Хранит в себе инфомацию о пользователях UsersFullInfo
UsersFullInfo Хранит дополнительную информацию о пользователях -
Places Хранит информацию о стране и городе пользователя, в котором он живем Users
Traveles Хранит путешествия и информацию о них Users
Locations Хранит информацию о локациях для путешествий Traveles
FriendsInTravel Хранит информацию о том, какие люди добавлены в путешествие Traveles, Users
Notes Информация о заметках Traveles
NotesInfo Информация о файле к заметках Notes
PlacesInfo Служит для того, чтобы хранить ID города и его координаты -
SearchExchange Хранит путешествия, выставленные на биржу Traveles
Payments Информация о тратах к путешествию Traveles
PaymentsInfo Информация о участниках траты к путешествию Payments
GuideInfo Хранит информацию, просмотрел ли пользователь информацию о разделе Users

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published