Skip to content

Бот для «Московской школы профессиональной филантропии», теперь личный Pet-проект😊 Существенно доработал изначальный проект, подробная информация в разделе "Авторы"

Notifications You must be signed in to change notification settings

alexpro2022/Telegram-Bot-for-MSPP

 
 

Repository files navigation

Проект MSPP:

MSPP CI/CD

Бот для «Московской школы профессиональной филантропии». Позволяет НКО оперативно получать информацию о новых заявках в волонтёры в качестве наставников для детей-сирот.

Оглавление:

Технологии:

Развернуть

Языки программирования, библиотеки и модули:

Python python-telegram-bot asyncio environ inspect logging typing uvicorn

JavaScript HTML CSS

Фреймворк, расширения и библиотеки:

Django mptt

База данных:

PostgreSQL

CI/CD:

GitHub_Actions docker_hub docker_compose Nginx SWAG Yandex.Cloud Telegram

Облачные технологии:

Google Google Aiogoogle

⬆️Оглавление

Описание работы:

Бот позволяет оформить онлайн-заявление:

  • в волонтёры-наставники для детей-сирот в фондах проекта ЗНАЧИМ
  • на включение местного фонда в проект ЗНАЧИМ

⬆️Оглавление

Установка и запуск:

Удобно использовать принцип copy-paste - копировать команды из GitHub Readme и вставлять в командную строку Git Bash или IDE (например VSCode).

Предварительные условия:

Развернуть

Предполагается, что пользователь:

  • создал бота.
  • создал сервисный аккаунт на платформе Google Cloud и получил JSON-файл с информацией о своем сервисном аккаунте, его приватный ключ, ID и ссылки для авторизации. Эти данные будет необходимо указать в файле переменных окружения.
  • создал аккаунт DockerHub, если запуск будет производиться на удаленном сервере.
  • установил Docker и Docker Compose на локальной машине или на удаленном сервере, где проект будет запускаться в контейнерах. Проверить наличие можно выполнив команды:
    docker --version && docker-compose --version

Локальный запуск

!!! Для пользователей Windows обязательно выполнить команду: иначе файл start.sh при клонировании будет бракован:

git config --global core.autocrlf false
  1. Установите ngrok.

  2. Активируйте тоннель для https соединения командой:

ngrok http 80

В поле Forwarding первым элементом будет указано значение вида https://ebd6-188-170-76-51.ngrok-free.app - его потребуется указать в новом .env-файле в переменной окружения DOMAIN (можно как с протоколом https:// , так и без него), (см. п.4).

  1. Не закрывайте окно терминала, иначе ngrok-тоннель также закроется. Откройте новое окно bash-терминала, в нем продолжим дальнейшую установку и запуск бота.

  2. Клонируйте репозиторий с GitHub и в .env-файле введите данные для переменных окружения (значения даны для примера, но их можно оставить; подсказки даны в комментариях):

git clone https://github.com/alexpro2022/Telegram-Bot-for-MSPP.git && \
cd Telegram-Bot-for-MSPP && \
cp .env_example .env && \
nano .env

Для работы бота необходимо задать значения минимум трем переменным окружения: TELEGRAM_BOT_TOKEN, DOMAIN, WEBHOOK_MODE. По умолчанию режим работы бота - polling. Этот режим удобен для первоначальной отладки бота, но в дальнейшем придется перейти на режим работы - webhook. Для этого задайте значение:

WEBHOOK_MODE=True
  1. Запуск - из корневой директории проекта выполните команду:
docker compose -f infra/local/docker-compose.yml up -d --build

Проект будет развернут в трех docker-контейнерах (db, web, nginx) по адресу http://localhost.

  1. Остановить docker и удалить контейнеры можно командой из корневой директории проекта:
docker compose -f infra/local/docker-compose.yml down

Если также необходимо удалить тома базы данных и статики:

docker compose -f infra/local/docker-compose.yml down -v

При повторных запусках приложения может потребоваться реактивация ngrok-тоннеля и обновление переменной окружения DOMAIN (см. п.2)


Запуск на удаленном сервере
  1. Создайте домен и привяжите его к публичному IP-адресу вашего удаленного сервера (введите его в поле current ip и кликните кнопку update ip).

  2. Сделайте форк в свой репозиторий.

  3. Создайте Actions.Secrets согласно списку ниже (значения указаны для примера) + переменные окружения из env_example файла:

PROJECT_NAME=mspp-bot
SECRET_KEY

DOCKERHUB_USERNAME
DOCKERHUB_PASSWORD

# Данные удаленного сервера и ssh-подключения:
HOST  # публичный IP-адрес вашего удаленного сервера
USERNAME
SSH_KEY
PASSPHRASE
DOMAIN=mspp-bot.duckdns.org   # созданный домен

# Учетные данные Телеграм-бота для получения сообщения о успешном завершении workflow:
TELEGRAM_USER_ID
TELEGRAM_BOT_TOKEN

# База данных:
DB_ENGINE=django.db.backends.postgresql
DB_HOST=db
DB_NAME=postgres
DB_PORT=5432
POSTGRES_USER=postgres
POSTGRES_PASSWORD=12345
  1. Запустите вручную workflow, чтобы автоматически развернуть проект в трех docker-контейнерах (db, web, nginx) на удаленном сервере.

При первом запуске будут автоматически произведены следующие действия:

  • выполнены миграции БД
  • БД заполнена начальными данными
  • создан суперюзер (пользователь с правами админа) с учетными данными из переменных окружения DJANGO_SUPERUSER_USERNAME, DJANGO_SUPERUSER_EMAIL, DJANGO_SUPERUSER_PASSWORD.
  • собрана статика

Вход в админ-зону осуществляется по адресу: http://hostname/admin/ , где hostname:

  • localhost
  • Доменное имя удаленного сервера, например mspp-bot.duckdns.org

⬆️Оглавление

Удаление:

Для удаления проекта выполните команду:

cd .. && rm -fr Telegram-Bot-for-MSPP

⬆️Оглавление

Авторы:

Studio Yandex Practicum

Aleksei Proskuriakov

  • написал приложение registration для отображения форм регистрации нового наставника и нового фонда, использовал HTML, CSS для отображения форм в Telegram WebApp и JavaScript для real-time валидации полей форм.
  • подключил doker-образ SWAG для получения SSL-сертификата (https соединение для webapp и webhook)
  • переписал функционал обработчиков беседы бота и навигации (KISS, DRY, YAGNI)
  • добавил дружественный интерфейс (эмоджи) и персонифицировал беседу (бот обрашается к пользователю по нику)
  • реализовал вывод информации только для фондов, представленных в регионе/городе (а не всех фондов вообще)
  • написал алгоритм меню для случая, если фонды одновременно могут быть и в регионе и в городах региона (хотя сама идея регионального фонда без привязки к населенному пункту выглядит спорно, но это в ТЗ)
  • сделал пагинацию меню (меню регинов состоит из нескольких страниц по 5 регионов на каждой)
  • реализовал отправку данных из форм в Google-таблицы после подверждения в меню confirmation из которого можно либо вернуться к повторному заполнению формы, если обнаружена некорректность в данных, либо отправить корректные данные в соответствующую таблицу (наставников или фондов).

⬆️В начало

About

Бот для «Московской школы профессиональной филантропии», теперь личный Pet-проект😊 Существенно доработал изначальный проект, подробная информация в разделе "Авторы"

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Languages

  • Python 80.0%
  • JavaScript 8.6%
  • HTML 7.8%
  • CSS 2.5%
  • Other 1.1%