mirror of
https://github.com/EDeev/school_menu.git
synced 2026-06-15 19:11:04 +03:00
Compare commits
5 commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 9d99aee431 | |||
| 054c108f6f | |||
| ea267f8453 | |||
| 7df1053509 | |||
|
|
e8a1c21447 |
3 changed files with 192 additions and 6 deletions
156
README.md
156
README.md
|
|
@ -1,4 +1,154 @@
|
||||||
<h2>Бот по взятию и рассылке данных с сайта школы</h2>
|
# 🍽️ School Menu Bot
|
||||||
|
|
||||||
<b>Этот бот может брать данные с айта школы и отсылать, что даёться на сегодня и завтра,
|
Автоматизированная система управления школьным питанием с интеграцией Telegram Bot API для сбора и обработки заказов.
|
||||||
также с возможной отсылкой информации в отдельную группу для уточнее блюда!</b>
|
|
||||||
|
## 🎯 Описание проекта
|
||||||
|
|
||||||
|
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>
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
TOKEN = "5164296616:AAHwvadm3BrUovhPk8ceKHbPctg654XGkyU"
|
TOKEN = "token from BotFather"
|
||||||
|
|
||||||
ID_BOT = 5164296616
|
ID_BOT = **********
|
||||||
TEX_GROUP = "-700432173"
|
TEX_GROUP = "-*********"
|
||||||
|
|
|
||||||
36
requirements.txt
Normal file
36
requirements.txt
Normal file
|
|
@ -0,0 +1,36 @@
|
||||||
|
# Telegram Bot Framework
|
||||||
|
aiogram==2.25.1
|
||||||
|
|
||||||
|
# Asynchronous HTTP Client
|
||||||
|
aiohttp==3.8.4
|
||||||
|
|
||||||
|
# Excel Files Processing
|
||||||
|
openpyxl==3.1.2
|
||||||
|
|
||||||
|
# HTTP Requests Library
|
||||||
|
requests==2.31.0
|
||||||
|
|
||||||
|
# Russian Language Morphological Analyzer
|
||||||
|
pymorphy2==0.9.1
|
||||||
|
|
||||||
|
# Morphological Dictionary
|
||||||
|
pymorphy2-dicts-ru==2.4.417127.4579844
|
||||||
|
|
||||||
|
# Additional Dependencies
|
||||||
|
certifi==2023.5.7
|
||||||
|
charset-normalizer==3.1.0
|
||||||
|
idna==3.4
|
||||||
|
urllib3==2.0.3
|
||||||
|
et-xmlfile==1.1.0
|
||||||
|
Babel==2.12.1
|
||||||
|
multidict==6.0.4
|
||||||
|
yarl==1.9.2
|
||||||
|
aiosignal==1.3.1
|
||||||
|
frozenlist==1.3.3
|
||||||
|
async-timeout==4.0.2
|
||||||
|
attrs==23.1.0
|
||||||
|
|
||||||
|
# Development Dependencies (Optional)
|
||||||
|
# pytest==7.3.1
|
||||||
|
# pytest-asyncio==0.21.0
|
||||||
|
# flake8==6.0.0
|
||||||
Loading…
Add table
Reference in a new issue