school_menu/README.md
2025-07-01 02:08:35 +03:00

154 lines
8.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 🍽️ School Menu Bot
Автоматизированная система управления школьным питанием с интеграцией Telegram Bot API для сбора и обработки заказов.
## 🎯 Описание проекта
School Menu Bot представляет собой многофункциональное решение для организации процесса заказа школьного питания. Система обеспечивает автоматический парсинг меню с официального сайта школы, предоставляет интерактивный интерфейс для заказов через Telegram и ведет детальную статистику по группам и пользователям.
## ⭐ Ключевые возможности
### Пользовательский функционал
- **Просмотр меню**: Получение актуального меню на текущий и следующий день
- **Интерактивные заказы**: Система выбора питания через inline-клавиатуры
- **Гибкое планирование**: Возможность заказа комбинаций (завтрак, обед, полдник)
- **Управление заказами**: Отмена и изменение активных заказов
### Административные функции
- **Групповая регистрация**: Система верификации через уникальные коды
- **Аналитика заказов**: Детальная статистика по группам и пользователям
- **Автоматические уведомления**: Ежедневная рассылка меню в 06:00
- **Мультигрупповая поддержка**: Раздельные каналы для учеников и администрации
### Техническая архитектура
- **Парсинг данных**: Автоматическое извлечение меню из Excel-файлов
- **Многоуровневая БД**: Система баз данных для пользователей, групп и заказов
- **Асинхронная обработка**: Неблокирующее выполнение операций
- **Морфологический анализ**: Корректное склонение слов в статистике
## 🛠️ Технологический стек
### Backend Framework
- **Python 3.8+** - Основной язык разработки
- **Aiogram** - Асинхронный фреймворк для Telegram Bot API
- **Asyncio** - Асинхронное программирование
### Data Processing
- **OpenPyXL** - Обработка Excel-файлов с меню
- **Requests** - HTTP-запросы к внешним ресурсам
- **PyMorphy2** - Морфологический анализ русского языка
### Database Management
- **SQLite** - Легковесная встроенная СУБД
- **Многоуровневая архитектура БД**:
- `base.db` - Основные данные групп и пользователей
- `users.db` - Пользовательские связки
- `groups.db` - Групповые данные и статистика
- `now.db` - Текущие активные заказы
## 📁 Структура проекта
```
school_menu/
├── code/
│ ├── bot.py # Основная логика бота
│ ├── pars.py # Парсер школьного меню
│ ├── sql.py # ORM для работы с БД
│ └── base.py # Конфигурация и токены
├── db/
│ ├── base.db # Основная база данных
│ ├── users.db # Пользовательские данные
│ ├── groups.db # Групповая статистика
│ └── now.db # Текущие заказы (пересоздается ежедневно)
├── requirements.txt # Зависимости проекта
└── README.md # Документация
```
## 🚀 Установка и запуск
### Предварительные требования
```bash
pip install -r requirements.txt
```
### Конфигурация
1. Создайте нового бота через [@BotFather](https://t.me/BotFather)
2. Настройте `code/base.py`:
```python
TOKEN = аш_токен_от_BotFather"
ID_BOT = ваш_id_бота
TEX_GROUP = "-id_технической_группы"
```
### Запуск системы
```bash
cd code/
python bot.py
```
## 💡 Алгоритм работы
### Процесс регистрации групп
1. Администратор вызывает `/add_group` в личных сообщениях
2. Система генерирует уникальные коды для основной и технической групп
3. Коды вводятся в соответствующих чатах для верификации
4. Создается связка групп с инициализацией статистики
### Система заказов
1. Парсинг актуального меню с `school01.ru/food/`
2. Пользователь выбирает комбинацию питания через `/eat`
3. Заказ фиксируется в основной группе и дублируется в техническую
4. Обновление статистики по группам и пользователям
### Автоматизация процессов
- **06:00 ежедневно**: Рассылка меню на следующий день
- **Учет выходных**: Автоматический пропуск воскресений
- **Сброс заказов**: Ежедневная очистка активных заказов
## 📊 Команды бота
| Команда | Описание | Доступность |
|---------|----------|-------------|
| `/start` | Инициализация бота | Личные сообщения |
| `/help` | Справочная информация | Универсально |
| `/today` | Меню на сегодня | Универсально |
| `/tomorrow` | Меню на завтра | Универсально |
| `/eat` | Интерфейс заказа | Только группы |
| `/stat` | Статистика группы | Только группы |
| `/add_group` | Регистрация групп | Личные сообщения |
| `/del_group` | Удаление связки | Личные сообщения |
## 🎯 Особенности реализации
### Безопасность данных
- Уникальная система кодов для верификации
- Раздельное хранение пользовательских и групповых данных
- Автоматическая очистка временных данных
### Производительность
- Асинхронная архитектура для обработки множественных запросов
- Оптимизированные SQL-запросы с контекстными менеджерами
- Кэширование статистических данных
### Масштабируемость
- Модульная архитектура классов для работы с БД
- Поддержка неограниченного количества групп
- Гибкая система расширения функционала
## 📋 Лицензия
Проект распространяется под лицензией MIT.
## 👥 Автор
**Деев Егор Викторович** - Backend Developer
- GitHub: [@EDeev](https://github.com/EDeev)
- Email: egor@deev.space
- Telegram: [@Egor_Deev](https://t.me/Egor_Deev)
---
<div align="center">
<sub>Разработано для автоматизации процессов школьного питания с упором на удобство использования и надежность системы.</sub>
<p><sub>Создано с ❤️ от вашего дорогого - deev.space ©</sub></p>
</div>