An open API service indexing awesome lists of open source software.

https://github.com/stormozov/chatbot-english-language-teacher

Курсовой проект Нетологии
https://github.com/stormozov/chatbot-english-language-teacher

Last synced: 3 months ago
JSON representation

Курсовой проект Нетологии

Awesome Lists containing this project

README

        

#

Chatbot-English-Language-Teacher

##

Курсовой проект по разработке телеграм чат-бота

Author: [STORMOZOV](https://github.com/stormozov)
Telegram: [@s_tormozov](https://t.me/s_tormozov)
Discord: sergeytormozov
Email: [email protected]
## Описание
Данный телеграм чат-бот предназначен для изучения английского языка
с помощью карточек слов. Программа написана на языке программирования Python
и использует библиотеку pyTelegramBotAPI для взаимодействия с пользователем
через Telegram. Программа позволяет пользователю изучать слова из различных
категорий, добавлять новые слова в словарь, удалять слова из словаря.
Программа также предоставляет возможность пользователю узнать о боте и
получить список всех доступных команд.

Программа использует базу данных PostgreSQL для хранения информации о
пользователях, слов и категориях слов. Также в проекте используется
библиотека SQLAlchemy для работы с базой данных.

В проекте также присутствует файл
[requirements.txt](https://github.com/stormozov/chatbot-english-language-teacher/blob/main/requirements.txt)
, который содержит список
всех необходимых зависимостей для установки и запуска программы.

## Программа имеет следующий функционал:
- Предоставляет пользователю слово для изучения
- Позволяет пользователю добавлять новые слова в словарь
- Позволяет пользователю удалять слова из словаря
- Предоставляет пользователю список всех доступных команд
- Предоставляет пользователю возможность узнать о боте

## Структура программы:
```
root (Корневая директория)
├── data (директория для хранения)
│ ├── bot_photo.jpg
│ ├── chatbot.json
│ └── words.json
├── modules (модули проекта)
│ ├── db (пакет взаимодействия с базой данных)
│ │ ├── db_operations.py
│ │ ├── db_session.py
│ │ ├── json2db.py
│ │ ├── models.py
│ │ └── __init__.py
│ ├── fs_tools (пакет для взаимодействия с файловой системой)
│ │ ├── path_utils.py
│ │ ├── read_config.py
│ │ ├── read_file.py
│ │ └── __init__.py
│ ├── tg_bot (пакет для телеграм-бота)
│ │ ├── bot.py (!Корневой модуль пакета)
│ │ ├── bot_config.py
│ │ ├── bot_init.py
│ │ ├── response_handlers.py
│ │ ├── __init__.py
│ │ ├── db (пакет для взаимодействия с базой данных)
│ │ │ ├── user_db_utils.py
│ │ │ ├── word_db_crud.py
│ │ │ ├── word_db_utils.py
│ │ │ └── __init__.py
│ │ ├── quiz (пакет для работы над опросником)
│ │ │ ├── handle_quiz.py
│ │ │ ├── quiz_validator.py
│ │ │ └── __init__.py
│ │ ├── ui (пакет для работы над UI бота)
│ │ │ ├── drop_down_menu.py
│ │ │ ├── nav_menu.py
│ │ │ ├── quiz_menu.py
│ │ │ └── __init__.py
│ │ ├── word (пакет для работы над словами)
│ │ │ ├── input_validation.py
│ │ │ ├── word_add.py
│ │ │ ├── word_del.py
│ │ │ ├── word_format.py
│ │ │ └── __init__.py
├── .gitignore
├── requirements.txt
├── main.py (главный файл проекта)
├── settings.ini
└── README.md
```

- Пакет модулей [fs_tools](https://github.com/stormozov/chatbot-english-language-teacher/tree/main/modules/fs_tools) (File System Tools) содержит модули,
которые предоставляют функции для работы с файловой системой. Эти функции
используются для управления файлами и директориями, которые необходимы для
работы чат-бота.
- Пакет модулей [db](https://github.com/stormozov/chatbot-english-language-teacher/tree/main/modules/db) (Database) содержит модули, которые необходимы для
инициализации моделей таблиц базы данных, создания сессии, загрузки данных
в таблицы.
- Пакет модулей [tg_bot](https://github.com/stormozov/chatbot-english-language-teacher/tree/main/modules/tg_bot) (Telegram bot) содержит модули и подпакеты, которые
необходимы для работы бота.
- Директория [data](https://github.com/stormozov/chatbot-english-language-teacher/tree/main/data) содержит файлы, которые необходимы для работы бота.
- Файл конфигурации `settings.ini`, в котором хранятся необходимые
конфиденциальные настройки для работы бота и базы данных.
- Файл [requirements.txt](https://github.com/stormozov/chatbot-english-language-teacher/blob/main/requirements.txt), в котором написаны зависимости, используемые для
разработки телеграм-бота.
- Файл [main.py](https://github.com/stormozov/chatbot-english-language-teacher/blob/main/main.py), который отвечает за работу всей программы.

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


Примерный дизайн бота

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


## Файл конфигурации
Для хранения конфиденциальной информации используется файл `settings.ini`,
который должен быть расположен в корневой директории вместе с `main.py`.
Его структура:
```ini
[TG]
TOKEN = *Ваш токен телеграм-бота*

[DB]
DBMS = postgresql # База данных
USER = *Ваше имя пользователя Postgres*
PASS = *Ваш пароль Postgres*
HOST = localhost # Хост для создания сессии
PORT = 5432 # Порт для создания сессии
DB = chatbot_english_words_netology # Название базы данных
```

## Инструкция по работе с программой
### 1. Регистрация бота в Телеграме
Вам понадобится бот [@BotFather](https://t.me/BotFather).
Это официальный инструмент для создания ботов и управления ими. Найти
BotFather можно через поиск. Обратите внимание на синюю галочку рядом с
именем: именно она укажет на правильный чат.

После регистрации вашего бота, **BotFather** предоставит ссылку на созданного
бота и токен для обращения к нему.

Полученный токен необходимо сохранить в файле конфигурации `settings.ini`:
```ini
[TG]
TOKEN = *Ваш токен телеграм-бота*
```

### 2. Настройки сообщений бота
Все основные данные для вывода ботом хранятся в файле
[chatbot.json](https://github.com/stormozov/chatbot-english-language-teacher/blob/main/data/chatbot.json)

Там вы можете поменять:
- сообщения бота;
- лейблы кнопок;
- количество правильных необходимых ответов для пользователя до
автоматического скрытия слова из выборки;
- regex паттерны для проверки ввода пользователя;
- описание команд бота для выпадающего меню.

Некоторые сообщения настраиваются напрямую в своих модулях.

### 3. Первоначальные данные для словаря бота
Данные для словаря хранятся в JSON формате. Со структурой можно ознакомиться в
файле [words.json](https://github.com/stormozov/chatbot-english-language-teacher/blob/main/data/words.json)

В файле есть три категории слов. Категория `custom` предназначена для связи
данной категории со словами пользователей.

За загрузку данных из JSON в базу данных отвечает модуль
[json2db.py](https://github.com/stormozov/chatbot-english-language-teacher/blob/main/modules/db/json2db.py)

### 4. Запуск чат-бота
Запуск программы осуществляем из файла [main.py](https://github.com/stormozov/chatbot-english-language-teacher/blob/main/main.py)
в вашей IDE, либо через терминал:
```
python main.py
```

### 5. Взаимодействие с ботом
После запуска бота нужно перейти в Telegram и найти его в списке чатов.
Затем следует нажать на кнопку «Старт» или ввести команду `/start`.

Бот поприветствует вас и предложит на выбор три варианта взаимодействия с помощью кнопок.

- Чтобы начать обучение, нажмите кнопку «Проверить знания» или введите
команду `/test_knowledge`
- Чтобы добавить новое слово, выберите кнопку «Добавить слово» или воспользуйтесь командой `/add_word`
- Чтобы удалить слово из словаря пользователя, выберите кнопку «Удалить слово» или введите команду `/delete_word`

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

### 6. Автоматическая проверка знаний ботом
В JSON файле [chatbot.json](https://github.com/stormozov/chatbot-english-language-teacher/blob/main/data/chatbot.json)
есть ключ `correct_answers`, в котором хранится количество необходимых
правильных ответов на вопросы бота. В рамках тестирования было выбрано число
два. При необходимости это значение можно поменять.

У пользователя есть отдельное поле в
[таблице базы данных](https://github.com/stormozov/chatbot-english-language-teacher/blob/main/modules/db/models.py#L78),
которое хранит количество правильных ответов на вопросы бота. Как только это
число достигнет указанного в JSON файле, слово автоматически будет скрыто из
выборки пользователя и будет показано соответствующее сообщение об успешном
изучении этого слова.