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

https://github.com/nata-practices/studentfvtbot

A comprehensive learning process management system that combines a Telegram bot and a web-based administration panel.
https://github.com/nata-practices/studentfvtbot

async flask mongodb python python-telegram-bot telegram-bot

Last synced: 2 months ago
JSON representation

A comprehensive learning process management system that combines a Telegram bot and a web-based administration panel.

Awesome Lists containing this project

README

          

# StudentFVTBot

Telegram бот для студентов, преподавателей и администрации университета с веб-панелью управления.

## Описание

StudentFVTBot - комплексная система для автоматизации учебного процесса, включающая Telegram-бота и веб-интерфейс администрирования. Система предоставляет студентам доступ к расписанию, учебным материалам, контактам преподавателей и возможность задавать вопросы. Преподаватели могут управлять материалами, отвечать на вопросы и делать рассылки. Администраторы имеют полный контроль над системой через веб-панель.

## Функциональность

### Для студентов
- Просмотр расписания занятий
- Доступ к учебным материалам
- Получение контактов института
- Отправка вопросов преподавателям
- Настройка персональных напоминаний
- Просмотр карты университета
- Отслеживание статуса обращений

### Для преподавателей
- Загрузка и управление учебными материалами
- Ответы на вопросы студентов
- Массовые рассылки по группам
- Просмотр информации о студентах

### Для администраторов
- Управление пользователями и ролями
- Мониторинг активности системы
- Настройка команд бота
- Просмотр логов и статистики
- Управление режимами работы бота

## Требования

- Python 3.8+
- MongoDB
- Telegram Bot Token

## Установка

1. Клонируйте репозиторий:
```bash
git clone https://github.com/yourusername/StudentFVTBot.git
cd StudentFVTBot
```

2. Установите зависимости:
```bash
pip install -r requirements.txt
```

3. Создайте файл `.env` в корневой директории со следующими параметрами:
```
DB_URL=connection string to mongodb
DB_NAME=mongodb name
TELEGRAM_TOKEN=telegram bot token
ENCRYPTION_KEY=encryption key
ADMIN_USERNAME=webapp admin username
ADMIN_PASSWORD=webapp admin password
```

4. Запустите приложение:
```bash
python main.py
```

## Структура проекта

```
StudentFVTBot/

├── bot/ # Модули Telegram-бота
│ ├── __init__.py # Регистрация всех обработчиков
│ ├── contacts_handler.py # Обработчик команды контактов
│ ├── login_handler.py # Обработчик авторизации
│ ├── map_handler.py # Обработчик карты университета
│ ├── materials_handler.py # Обработчик учебных материалов
│ ├── notifications_handler.py # Обработчик напоминаний
│ ├── questions_handler.py # Обработчик вопросов студентов
│ ├── questions_tracker_handler.py # Трекер вопросов
│ ├── start_handler.py # Обработчик команды /start
│ └── timetable_handler.py # Обработчик расписания

├── core/ # Основные модули системы
│ ├── models/ # Модели данных
│ │ ├── command_config.py # Конфигурация команд
│ │ ├── config.py # Системные настройки
│ │ ├── notification_config.py # Конфигурация уведомлений
│ │ ├── question_config.py # Конфигурация вопросов
│ │ └── users.py # Модель пользователей
│ ├── db.py # Работа с базой данных
│ └── templates.py # Шаблоны документов

├── services/ # Сервисные модули
│ ├── encryption.py # Сервис шифрования
│ └── schedule_parser.py # Парсер расписания

├── webapp/ # Веб-приложение
│ ├── routes/ # Маршруты Flask
│ │ ├── __init__.py # Инициализация маршрутов
│ │ ├── announcements_routes.py # Рассылки
│ │ ├── auth_routes.py # Авторизация
│ │ ├── check_routes.py # Проверки системы
│ │ ├── dashboard_routes.py # Главная панель
│ │ ├── logs_routes.py # Просмотр логов
│ │ ├── materials_routes.py # Управление материалами
│ │ ├── questions_routes.py # Управление вопросами
│ │ ├── settings_routes.py # Настройки системы
│ │ └── user_routes.py # Управление пользователями
│ ├── static/ # Статические файлы
│ │ ├── css/ # Стили
│ │ └── icons/ # Иконки
│ └── templates/ # HTML шаблоны
│ ├── announcements.html # Страница рассылок
│ ├── base.html # Базовый шаблон
│ ├── index.html # Главная страница
│ ├── login.html # Страница входа
│ ├── logs.html # Страница логов
│ ├── materials.html # Страница материалов
│ ├── questions.html # Страница вопросов
│ ├── settings.html # Страница настроек
│ └── users.html # Страница пользователей

├── utils/ # Вспомогательные утилиты
│ ├── check_utils.py # Проверки доступности
│ └── logger_utils.py # Настройка логирования

├── tests/ # Тесты
│ ├── test_check_utils.py
│ ├── test_encryption.py
│ ├── test_logger_utils.py
│ ├── test_measure_duration.py
│ └── test_schedule_parser.py

├── schedules/ # Файлы расписания
│ └── mapping.json # Маппинг групп к файлам

├── materials/ # Учебные материалы (создается автоматически)
├── logs/ # Логи приложения (создается автоматически)
├── data/ # Данные приложения
│ └── scheme.jpg # Схема университета

├── main.py # Точка входа приложения
├── scheduler.py # Планировщик задач
├── requirements.txt # Зависимости Python
├── .gitignore # Игнорируемые файлы Git
└── README.md # Документация
```

## Архитектура

### Telegram Bot
- Использует библиотеку python-telegram-bot
- Асинхронная обработка команд
- ConversationHandler для многошаговых диалогов
- Декораторы для проверки доступности и измерения производительности

### Web Application
- Flask-приложение с Blueprint архитектурой
- Система авторизации с поддержкой ролей
- Responsive дизайн с использованием CSS Grid
- AJAX для динамического обновления контента

### База данных
- MongoDB для хранения данных
- Коллекции: users, config, notifications, questions, data
- Шифрование паролей с использованием Fernet

### Безопасность
- Шифрование паролей пользователей
- Проверка ролей для доступа к функциям
- Защита от SQL-инъекций через параметризованные запросы
- CSRF-защита через Flask sessions

## Команды бота

- `/start` - Начало работы с ботом
- `/login <группа>` - Авторизация в системе
- `/get_timetable` - Получить расписание
- `/contacts` - Контакты института
- `/materials` - Учебные материалы
- `/questions` - Задать вопрос преподавателю
- `/create_notification` - Создать напоминание
- `/notification_list` - Список напоминаний
- `/map` - Карта университета
- `/tracker` - Отслеживание вопросов

## Веб-интерфейс

Доступен по адресу `http://localhost:5000` после запуска приложения.

### Страницы администратора
- Главная панель - статистика и управление ботом
- Пользователи - управление пользователями и ролями
- Вопросы - просмотр и ответы на вопросы
- Логи - системные логи
- Настройки - конфигурация бота и команд

### Страницы преподавателя
- Материалы - загрузка и управление файлами
- Рассылка - отправка сообщений студентам
- Вопросы - ответы на вопросы студентов

## Мониторинг

Система собирает следующую статистику:
- Количество выполнений команд
- Время выполнения команд
- Количество новых пользователей
- Активность по группам
- История авторизаций

## Разработка

### Добавление новой команды

1. Создайте обработчик в директории `bot/`
2. Зарегистрируйте обработчик в `bot/__init__.py`
3. Добавьте команду в список BotCommand в `main.py`

### Добавление нового маршрута веб-приложения

1. Создайте файл маршрута в `webapp/routes/`
2. Зарегистрируйте Blueprint в `webapp/routes/__init__.py`
3. Создайте соответствующий шаблон в `webapp/templates/`

## Тестирование

Запуск тестов:
```bash
pytest
```