diff --git a/README.en.md b/README.en.md new file mode 100644 index 0000000..7ba55fb --- /dev/null +++ b/README.en.md @@ -0,0 +1,41 @@ +# School Menu Bot + +[Русский](README.md) · **English** + +[![CI](https://github.com/EDeev/school_menu/actions/workflows/ci.yml/badge.svg)](https://github.com/EDeev/school_menu/actions/workflows/ci.yml) + +A school cafeteria Telegram bot: every morning it posts the menu from the school website, takes breakfast, +lunch and snack orders by class and compiles a summary for the cafeteria. + +**Status:** school project (2021–2022), completed, archived + +**Stack:** Python 3.10 · aiogram 2 · SQLite · openpyxl (menu from Excel) · pymorphy2 + +- Today's and tomorrow's menu (`/today`, `/tomorrow`) and a 06:00 broadcast +- Ordering with buttons, cancelling and changing an order +- Class registration by code, separate groups for students and the cafeteria +- Order summary by class with correct Russian word forms + +## Running + +```bash +pip install -r requirements.txt +cd code && BOT_TOKEN=token BOT_ID=bot_id TECH_GROUP_ID=group_id python bot.py +``` + +Portion weights and calories from Excel are parsed without `eval`: only numbers and `+ - * /` are allowed. + +## License + +School project (2021–2022). The code is open for study; there is no separate license. + +## Author + +**Egor Deev** — [GitHub](https://github.com/EDeev) · [Telegram](https://t.me/DeevEgor) · [egor@deev.space](mailto:egor@deev.space) + +--- + +
+ ⭐ If you find this project useful, give it a star on GitHub! +

Made with ❤️ — deev.space

+
diff --git a/README.md b/README.md index 3521459..593f262 100644 --- a/README.md +++ b/README.md @@ -1,154 +1,41 @@ -# 🍽️ School Menu Bot +# School Menu Bot -Автоматизированная система управления школьным питанием с интеграцией Telegram Bot API для сбора и обработки заказов. +**Русский** · [English](README.en.md) -## 🎯 Описание проекта +[![CI](https://github.com/EDeev/school_menu/actions/workflows/ci.yml/badge.svg)](https://github.com/EDeev/school_menu/actions/workflows/ci.yml) -School Menu Bot представляет собой многофункциональное решение для организации процесса заказа школьного питания. Система обеспечивает автоматический парсинг меню с официального сайта школы, предоставляет интерактивный интерфейс для заказов через Telegram и ведет детальную статистику по группам и пользователям. +Telegram-бот школьной столовой: каждое утро присылает меню с сайта школы, принимает заказы завтраков, +обедов и полдников по классам и собирает сводку для столовой. -## ⭐ Ключевые возможности +**Статус:** школьный проект (2021–2022), завершён, в архиве -### Пользовательский функционал -- **Просмотр меню**: Получение актуального меню на текущий и следующий день -- **Интерактивные заказы**: Система выбора питания через inline-клавиатуры -- **Гибкое планирование**: Возможность заказа комбинаций (завтрак, обед, полдник) -- **Управление заказами**: Отмена и изменение активных заказов +**Стек:** Python 3.10 · aiogram 2 · SQLite · openpyxl (меню из Excel) · pymorphy2 -### Административные функции -- **Групповая регистрация**: Система верификации через уникальные коды -- **Аналитика заказов**: Детальная статистика по группам и пользователям -- **Автоматические уведомления**: Ежедневная рассылка меню в 06:00 -- **Мультигрупповая поддержка**: Раздельные каналы для учеников и администрации +- Меню на сегодня и завтра (`/today`, `/tomorrow`) и рассылка в 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 +cd code && BOT_TOKEN=токен BOT_ID=id_бота TECH_GROUP_ID=id_группы python bot.py ``` -### Конфигурация -1. Создайте нового бота через [@BotFather](https://t.me/BotFather) -2. Настройте `code/base.py`: -```python -TOKEN = "ваш_токен_от_BotFather" -ID_BOT = ваш_id_бота -TEX_GROUP = "-id_технической_группы" -``` +Граммовка и калорийность из Excel разбираются без `eval`: допускаются только числа и `+ - * /`. -### Запуск системы -```bash -cd code/ -python bot.py -``` +## Лицензия -## 💡 Алгоритм работы +Школьный проект (2021–2022). Код открыт для изучения, отдельной лицензии нет. -### Процесс регистрации групп -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) +**Деев Егор Викторович** — [GitHub](https://github.com/EDeev) · [Telegram](https://t.me/DeevEgor) · [egor@deev.space](mailto:egor@deev.space) ---
- Разработано для автоматизации процессов школьного питания с упором на удобство использования и надежность системы. -

Создано с ❤️ от вашего дорогого - deev.space ©

+ ⭐ Если проект оказался полезным, поставьте звёздочку на GitHub! +

Сделано с ❤️ — deev.space