Skip to content

maxter9595/EngStudyBot

Repository files navigation

📚 EngStudyBot - Telegram-бот для изучения английского языка

1. Лимиты внешних API и прочие ограничения

Oxford Dictionary

  • Аудио: запись произношения (MP3) недоступна для всех слов. В некоторых случаях бот не способен найти аудио или скачать его.
  • Частота запросов: слишком интенсивный парсинг может привести к блокировке IP-адреса. В скрипте реализованы задержки между запросами для снижения риска блокировки.

Promt

  • Качество перевода: переводы и примеры предложений формируются автоматизированным сервисом. По этой причине могут возникнуть стилистические неточности.
  • Определение частей речи: алгоритм иногда ошибается при работе с многозначными словами или сложными грамматическими случаями.

Telegram

  • Размер сообщений: одно сообщение (включая текст и примеры предложений) не должно превышать 4096 символов.
  • Размер аудиофайлов: загружаемые MP3-файлы не должны превышать 50 МБ (ограничение Telegram API).

Прочие ограничения

  • Поддерживаемые части речи: бот обрабатывает только существительные (noun), глаголы (verb) и прилагательные (adjective). Остальные части речи определяются как unidentified.
  • Спецсимволы: в словах недопустимы следующие символы: <, >, :, ", /, \, |, ?, *. При создании имени аудиофайла они автоматически удаляются.
  • Регистр букв: регистр не играет роли при вводе слов для добавления или удаления (все слова приводятся к нижнему регистру).

2. Особенности работы приложения

2.1. Запуск чат-бота

  • После подключения к чат-боту Telegram нажимается кнопка Start
  • Отгадывается правильный перевод английского слова

2.2. Выбор варианта ответа и клавиша "Дальше"

  • При выборе неправильного варианта ответа появляется крестик
  • При выборе корректного варианта ответа появляется сообщение о верном ответе
  • Для продолжения викторины нажимается клавиша "Дальше"

2.3. Клавиша "Добавить слово"

  • После нажатия на клавишу "Добавить слово" чат-бот попросит пользователя ввести английское слово, которое необходимо добавить в базу данных (БД)
  • Ввод команд "Дальше", "Добавить слово", "Удалить слово" невозможен после выбора команды "Добавить слово"
  • При добавлении существующего английского слова чат-бот сообщит о его наличии в БД

  • При вводе нового английского слова, существующего в БД онлайн-словарей (Oxford, Promt.One), чат-бот автоматически добавит его в БД пользователя Telegram
  • При вводе нового английского слова, отсутствующего в БД онлайн-словарей, чат-бот попросит пользователя ввести перевод английского слова

  • В случае ввода слова на некорректном языке (русский вместо английского или наоборот) Telegram-бот попросит нажать на кнопку «Добавить слово» и повторить попытку

2.4. Клавиша "Удалить слово"

  • Для удаления английского слова из БД пользователя Telegram необходимо нажать на клавишу "Удалить слово"
  • Непредусмотренное нажатие клавиш, содержащих команды "Дальше", "Добавить слово" и "Удалить слово", приведет к невозможности обработки их чат-ботом
  • При отсутствии английского слова в БД пользователя Telegram чат-бот известит его о невозможности выполнить запрошенную операцию

  • При наличии введенного английского слова в БД пользователя Telegram-бот его удалит
  • При вводе русского слова вместо английского чат-бот попросит пользователя Telegram нажать на клавишу "Удалить слово" и повторить попытку

3. Инструкция по локальному запуску проекта

3.1. Клонирование репозитория

  • Клонирование репозитория:
git clone https://github.com/maxter9595/EngStudyBot.git
cd EngStudyBot

3.2. Настройка переменных окружения с установкой Telegram-токена

  • Документация по Telegram Bot API: https://core.telegram.org/bots/api

  • Указание переменных окружения с учетом валидного Telegram-токена:

# 7...O4 - Telegram-токен, заменяющий фразу "your_token"
bash -c "cp .env_example .env && sed -i 's/your_token/7...O4/g' .env"

3.3. Запуск Docker

  • Запуск Docker Desktop. Его наличие необходимо для запуска Docker-контейнеров

  • Сборка и запуск Docker:

docker compose build
docker compose up -d

3.4. Тестирование приложения

  • Проверка наличия Docker-контейнеров и запуск тестирования функционала приложения:
docker-compose ps
docker-compose run test

3.5. Подключение к административной панели СУБД PostgreSQL

  • Ссылка для подключения: http://localhost:5050/

  • Данные администратора БД для входа в административную панель PostgreSQL:

Почта: admin@example.com
Пароль: admin123
  • Register...Server.... Данные соединения:
Host: db
Port: 5432
Maintenance database: EngStudyBot
Username: postgres
Password: postgres

3.6. Проверка работы приложения

  • Проверка работы Telegram-бота

4. Инструкция по деплою проекта на сервере

4.1. Покупка сервера и подключение к нему

  • Рег.RU - Облачный сервер с предустановленным Docker: https://www.reg.ru/cloud/docker

  • Пример IP-адреса и информация о сервере для покупки:

- IP-адрес: 91.197.99.158
- Предустановленный Docker: да 
- Образ: Ubuntu
- Тарифы и конфигурации: производительный
- Тариф: HP C2-M2-D40
- Регион размещения: Москва
- Плавающий (публичный) IP-адрес: да
- Резервное копирование: да
  • Вход на сервер после его приобретения:
ssh root@91.197.99.158

4.2. Подготовка сервера для деплоя

  • Создание пользователя и добавление его в группу sudo:
adduser myappuser
usermod -aG sudo myappuser
  • Установка зависимостей:
apt update && apt upgrade -y
apt install -y git nginx ufw
  • Настройка firewall:
sudo ufw allow 5432
sudo ufw allow 5050
sudo ufw allow 22
ufw allow 80
ufw enable
  • Запуск Docker:
# На выбранном сервере Docker уже предустановлен
systemctl enable docker
systemctl start docker
  • Добавление пользователя в группу docker и его переподключение на сервер для утверждения прав:
usermod -aG docker myappuser
exit

# Вход по паролю, заданному пользователю через adduser myappuser
ssh myappuser@91.197.99.158

4.3. Клонирование репозитория. Подготовка переменных окружения

  • Клонирование репозитория:
git clone https://github.com/maxter9595/EngStudyBot.git
cd EngStudyBot

  • Указание переменных окружения с учетом валидного Telegram-токена:
# 7...O4 - Telegram-токен, заменяющий фразу "your_token"
cp .env_example .env && sed -i "s/your_token/7...O4/g" .env

4.4. Запуск Docker

  • Сборка и запуск Docker:
cd ~/MyCloudApp
docker compose build
docker compose up -d
  • Проверка наличия Docker контейнеров и запуск тестов:
docker compose ps
docker compose run test

4.5. Настройка админской панели СУБД PostgreSQL

  • Админка PostgreSQL (через PGAdmin): http://91.197.99.158:5050/

  • Данные администратора БД для входа в административную панель СУБД PostgreSQL:

Почта: admin@example.com
Пароль: admin123
  • Register...Server.... Данные соединения к БД в СУБД PostgreSQL:
Host: db
Port: 5432
Maintenance database: EngStudyBot
Username: postgres
Password: postgres

4.6. Проверка работы приложения

  • Проверка работы Telegram-бота

5. Настройка автодеплоя проекта (CI/CD)

5.1. Генерация SSH-ключа на локальном ПК

  • Генерация SSH-ключа на локальном ПК:
ssh-keygen -t ed25519 -C "max.t95@bk.ru"
  • Вывод SSH-ключа из локального ПК для копирования:
type $env:USERPROFILE\.ssh\id_ed25519.pub
# Копируем SSH-ключ
ssh-ed25519 AAAA...g5 max.t95@bk.ru

5.2. Генерация SSH-ключа на сервере

  • Вход на сервер:
ssh myappuser@91.197.99.158
  • Генерация SSH-ключа на сервере:
ssh-keygen -t ed25519 -C "max.t95@bk.ru"
  • Вывод SSH-ключа из сервера для просмотра:
ssh-keygen -y -f ~/.ssh/id_ed25519
# SSH-ключ из сервера понадобится для удаленного подключения к GitHub
ssh-ed25519 AAAA...hc max.t95@bk.ru

5.3. Добавление SSH-ключей из локального ПК и сервера в список авторизованных ключей сервера

  • Ввод SSH-ключа из сервера в список авторизированных ключей:
ssh-keygen -y -f ~/.ssh/id_ed25519 >> ~/.ssh/authorized_keys
  • Ввод SSH-ключа из локального ПК в список авторизированных ключей:
echo "ssh-ed25519 AAAA...g5 max.t95@bk.ru" >> ~/.ssh/authorized_keys
  • Просмотр списка авторизированных ключей:
cat ~/.ssh/authorized_keys
# В результате должно быть два SSH-ключа в списке авторизованных ключей
ssh-ed25519 AAAA...hc max.t95@bk.ru
ssh-ed25519 AAAA...g5 max.t95@bk.ru

5.4. Настройка sudo без пароля для CI/CD

  • Настройка прав для authorized_keys:
chmod 600 ~/.ssh/authorized_keys
chmod 700 ~/.ssh
  • Вход в visudo и добавление параметров для обхода паролей пользователя при деплое:
sudo visudo
# Добавляем в конце файла следующее:
myappuser ALL=(ALL) NOPASSWD: ALL
  • Выход из сервера и проверка входа на сервер без пароля:
exit
ssh myappuser@91.197.99.158
# Если всё ок — войдём без пароля

5.5. Привязка SSH-ключа к GitHub

  • Вывод публичного SSH-ключа для интеграции с GitHub:
cat ~/.ssh/id_ed25519.pub
# Копируем все, что будет выведено
ssh-ed25519 AAAA...hc max.t95@bk.ru
  • Привязка публичного ключа к GitHub:

    • Сайт GitHubSettingsSSH and GPG keysNew SSH key. Заполняем параметры SHH-ключа:

      • Тип ключа: Authentication Key

      • Имя ключа: VM-server

      • В поле Key добавляем содержимое SSH-ключа. Пример - ssh-ed25519 AAAA...hc max.t95@bk.ru

    • После добавления параметров SSH-ключа нажимаем Add SSH key

5.6.Настройка файла SSH-конфигурации. Проверка подключения к GitHub

  • Внесение GitHub в список известных хостов сервера:
ssh-keyscan -H github.com >> ~/.ssh/known_hosts
  • Настройка конфигурации для SSH:
nano ~/.ssh/config
----- ~/.ssh/config -----
Host github.com
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_ed25519
----- ~/.ssh/config -----
  • Установка прав для файла SSH-конфигурации:
chmod 600 ~/.ssh/config
  • Проверка взаимодействия с GitHub:
ssh -T git@github.com
# Если всё ок — увидим следующее сообщение:
# Hi <логин>! You've successfully authenticated ...

5.7. Установка значений secret-параметров GitHub-репозитория для автодеплоя

  • Ввод команды на сервере для получения SSH_PRIVATE_KEY:
cat ~/.ssh/id_ed25519
# Копируем все вместе с комментариями BEGIN и END
-----BEGIN OPENSSH PRIVATE KEY----- 
b3...= 
-----END OPENSSH PRIVATE KEY-----
  • Ввод secrets для автодеплоя GitHub-репозитория:

    • SSH_HOST: 91.197.99.158 (или другой IP-адрес сервера)

    • SSH_USER: myappuser

    • SSH_PRIVATE_KEY: результат команды cat ~/.ssh/id_ed25519 на сервере

    • TG_TOKEN: Telegram-токен

  • После установки secrets проверяем функционал автодеплоя

About

Telegram-бот для изучения английского языка

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors