Skip to content

Telegram бот для профориентационного тестирования подростков

Notifications You must be signed in to change notification settings

avpech/you_can_bot

 
 

Repository files navigation

You Can Bot - telegram-бот для профориентации подростков

Описание проекта

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

Преимущества проекта

  • Эффективность: Telegram-бот ускоряет процесс профориентации и экономит время как ребят, так и профдизайнеров, позволяя получать результаты мгновенно.
  • Доступность: Пользователи могут воспользоваться ботом в любое время, что сделает профориентацию более доступной и удобной.
  • Хранение результатов в базе данных: Профдизайнеры имеют постоянный доступ к результатам тестирования пользователей, что позволяет им легко отслеживать и анализировать прогресс и потребности подростков в любое удобное время.
  • Вопросы и консультации через бота: Подростки могут задавать вопросы профдизайнерам через бота в любое время. Профдизайнеры получают уведомления о новых запросах и могут предоставить консультацию и поддержку в Админ-панели.

Используемый стек

Python Django DRF Python-telegram-bot Postgres Nginx

Архитектура проекта

Директория Описание
infra Файлы для запуска с помощью Docker, настройки Nginx
src/backend Код Django приложения
src/bot Код бота

Функциональные цели

Нажмите, чтобы развернуть спойлер
  • Доступ к тестированию только при регистрации в ЛК
  • Отправка отформатированных сообщений с вопросами пользователю
  • Автоматическая интерпретация результатов заданий
    • Задания 1-4
    • Задание 8
  • Отправка расшифровок по профессиональным направлениям на основе результатов тестов
  • Меню с возможностью просмотра списка заданий и расшифровок к ним
  • Возможность через кнопку меню задать вопрос профдизайнеру
  • Просмотр результата тестов в админ-панели
  • Общая сводка по подростку с возможностью скачать в PDF
  • Возможность ответить на вопрос подростка в админ-панели
  • Уведомление профдизайнера в telegram о том, что ему пришёл вопрос от подростка
  • Тестирование API Django приложения
  • Регистрация профдизайнеров в админ-панели

Системные требования

  • Python 3.11+;
  • Docker (19.03.0+) c docker compose;
  • Poetry.

Эксплуатация и тестирование

Установка проекта локально (без docker)

  1. Устанавливаем инструмент для работы с виртуальным окружением и сборки пакетов poetry:
Информация по poetry и его установка

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

Как скачать и установить?

Установка

  1. Установите poetry следуя инструкции с официального сайта.
  2. После установки перезапустите оболочку и введите команду
poetry --version
  1. Если установка прошла успешно, вы получите ответ в формате
Poetry (version 1.2.0)
ℹ️ Опционально: измените конфигурацию poetry
poetry config virtualenvs.in-project true
Выполнение данной команды необходимо для создания виртуального окружения в папке проекта.
  1. Создадим виртуальное окружение нашего проекта с помощью команды:
poetry install

Результатом выполнения команды станет создание в корне проекта папки .venv. Зависимости для создания окружения берутся из файлов poetry.lock (приоритетнее) и pyproject.toml

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

poetry add <package_name>

Пример использования:

poetry add starlette

Также poetry позволяет разделять зависимости необходимые для разработки, от основных. Для добавления зависимости необходимой для разработки и тестирования необходимо добавить флаг --group dev

poetry add <package_name> --group dev

Пример использования:

poetry add pytest --group dev
Порядок работы после настройки

Чтобы активировать виртуальное окружение, введите команду:

poetry shell

Существует возможность запуска скриптов и команд с помощью команды без активации окружения:

poetry run <script_name>.py

Примеры:

poetry run python script_name>.py
poetry run pytest
poetry run black

Порядок работы в оболочке не меняется. Пример команды для Win:

python src/run_bot.py

Доступен стандартный метод работы с активацией окружения в терминале с помощью команд, если использовали virtualenvs.in-project true:

Для WINDOWS:

source .venv/Scripts/activate

Для UNIX:

source .venv/bin/activate
  1. Клонируем репозиторий и переходим в его директорию:
git clone https://github.com/Studio-Yandex-Practicum/you_can_bot.git && cd you_can_bot
  1. Копируем файл .env.example с новым названием .env и заполняем его необходимыми данными:
cp .env.example .env
nano .env
  1. Подготавливаем бэкенд к работе:
cd src/backend/
python manage.py migrate
  1. Наполняем БД данными заданий:
python manage.py loaddata \
    fixtures/tasks.json \
    fixtures/task_1_data.json \
    fixtures/task_2_data.json \
    fixtures/task_3_data.json \
    fixtures/task_4_data.json \
    fixtures/task_5_data.json \
    fixtures/task_6_data.json \
    fixtures/task_7_data.json \
    fixtures/task_8_data.json \
    fixtures/groups.json

Запуск проекта локально (без docker)

Если нужен доступ в админскую часть для управления данными, создаем администратора:

python manage.py createsuperuser

Для запуска REST API бэкенда используем команду:

python manage.py runserver

Для запуска телеграм-бота используем команду (в отдельном терминале):

cd src/bot/
python run_bot.py

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

Чтобы запустить unittest тестирование работы функционала проекта, нужно:

  1. Для тестирования Django приложения
cd src/backend/
python manage.py test
  1. Для тестирования бота
cd src/bot/
python -m unittest

Установка и запуск в Docker-контейнерах:

Cкачайте и установите Docker, следуя инструкции (для Windows; в левом меню есть возможность выбрать инструкцию для другой ОС).

  1. Создайте .env file в папке проекта на основе .env.example
  2. Удалите локальную тестовую базу (если создавали) во избежание конфликтов (optional)
  3. Перейдите в папку infra:
cd infra/
  1. Запустите следующую команду:
docker-compose up -d

Эта команда создаст и запустит в фоновом режиме контейнеры, необходимые для работы приложения (db, backend, bot, nginx).

  1. Затем выполните следующие команды внутри контейнера backend
  • Применение миграций
docker-compose exec backend python backend/manage.py migrate
  • Загрузка данных заданий
docker-compose exec backend python backend/manage.py loaddata \
    backend/fixtures/tasks.json \
    backend/fixtures/task_1_data.json \
    backend/fixtures/task_2_data.json \
    backend/fixtures/task_3_data.json \
    backend/fixtures/task_4_data.json \
    backend/fixtures/task_5_data.json \
    backend/fixtures/task_6_data.json \
    backend/fixtures/task_7_data.json \
    backend/fixtures/task_8_data.json \
    backend/fixtures/groups.json
  • Создание супер пользователя (optional)

win:

docker-compose exec backend python backend/manage.py createsuperuser

linux:

docker compose exec -it backend python backend/manage.py createsuperuser
  • Сбор статики
docker-compose exec backend python backend/manage.py collectstatic --no-input

Админка будет доступна по адресу http://127.0.0.1/admin/

Рекомендации для разработчиков

Форматирование кода

На проекте принято использовать black для автоформатирования кода. https://black.readthedocs.io/en/stable/usage_and_configuration/the_basics.html

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

# fmt: off
test_user_answers = {
    1: 'а', 2: 'а', 3: 'б', 4: 'а', 5: 'б', 6: 'а', 7: 'б',
    8: 'а', 9: 'а', 10: 'б', 11: 'а', 12: 'б', 13: 'а', 14: 'б',
    15: 'а', 16: 'а', 17: 'б', 18: 'а', 19: 'б', 20: 'а', 21: 'б',
}
# fmt: on

pre-commit

Обязательно установите git hooks с помощью pre-commit, которые будут выполняться при git commit, это автоматизирует применение к вашим изменениям автоформатирование black, проверки isort, flake8 и др.

Для этого находясь в корневой директории проекта выполните команду

pre-commit install

Работа с Poetry

В этом разделе представлены наиболее часто используемые команды.

Подробнее: https://python-poetry.org/docs/cli/

Создать виртуальное окружение и установить зависимости

poetry install

Использование --without dev позволяет устанавливать зависимости без зависимостей группы dev.

Добавить зависимость в pyproject.toml

poetry add <package_name>

Использование --group dev позволяет установить зависимость, необходимую только для разработки. Это полезно для разделения develop и prod зависимостей.

Ветки

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

  • feature/send-sandwiches
  • fix/process-bread-not-found.

About

Telegram бот для профориентационного тестирования подростков

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 96.9%
  • HTML 2.8%
  • Other 0.3%