# 📅 Расписание отключений — v1.4 **Версия:** v1.4 **Дата:** 26 февраля 2026 г. **Статус:** ✅ Реализовано --- ## 📋 Описание Система управления расписанием плановых отключений (вода, свет, отопление, газ, лифт). Админ создаёт события, бот напоминает за 1 час до начала, жильцы всегда в курсе отключений. --- ## 🎯 Возможности - ✅ Создание событий с типом, названием, временем - ✅ 6 типов отключений (вода, свет, отопление, газ, лифт, общее) - ✅ Inline-меню для выбора типа - ✅ Пошаговое создание (тип → название → время → описание) - ✅ Просмотр расписания командой `/график` - ✅ Напоминание за 1 час до начала (авто) - ✅ Удаление событий из расписания - ✅ Emoji для каждого типа --- ## 📱 Команды ### Для администраторов: | Команда | Описание | Пример | |---------|----------|--------| | `/schedule_add` | Добавить событие в расписание | `/schedule_add` | | `/schedule_del ` | Удалить событие по ID | `/schedule_del 5` | ### Для всех: | Команда | Описание | Пример | |---------|----------|--------| | `/график` | Показать расписание отключений | `/график` | | `/schedule` | Альтернатива `/график` | `/schedule` | --- ## 🎯 Сценарии использования ### Сценарий 1: Создание события (пошагово) **1. Админ пишет:** ``` /schedule_add ``` **2. Бот показывает меню:** ``` 📅 Добавление события в расписание Выберите тип отключения: 1️⃣ 💧 Вода 2️⃣ ⚡ Электричество 3️⃣ 🔥 Отопление 4️⃣ 🔶 Газ 5️⃣ 🛗 Лифт 6️⃣ 📋 Общее Или отправьте номер типа (1-6): [кнопки с типами] ``` **3. Админ нажимает** `💧 Вода` **или отправляет** `1` **4. Бот просит название:** ``` ✅ Тип: 💧 Вода Теперь отправьте название события: Например: "Плановое отключение воды" ``` **5. Админ отправляет:** ``` Плановое отключение воды ``` **6. Бот просит время начала:** ``` ✅ Название: Плановое отключение воды Теперь отправьте дату и время НАЧАЛА в формате: ДД.ММ.ГГГГ ЧЧ:ММ Например: 27.02.2026 10:00 ``` **7. Админ отправляет:** ``` 27.02.2026 10:00 ``` **8. Бот просит время окончания:** ``` ✅ Начало: 27.02.2026 10:00 Теперь отправьте дату и время ОКОНЧАНИЯ: ДД.ММ.ГГГГ ЧЧ:ММ ``` **9. Админ отправляет:** ``` 27.02.2026 14:00 ``` **10. Бот просит описание:** ``` ✅ Окончание: 27.02.2026 14:00 Отправьте описание (необязательно) или нажмите "Пропустить": [⏭️ Пропустить] ``` **11. Админ отправляет описание или пропускает:** ``` Будут отключены стояки с 1 по 10 этаж ``` **12. Бот подтверждает создание:** ``` ✅ Событие добавлено в расписание! 💧 Вода — Плановое отключение воды 📅 Начало: 27.02.2026 10:00 📅 Окончание: 27.02.2026 14:00 ⏱️ Длительность: 4.0 ч. 🔖 ID: 1 Для просмотра: /график ``` --- ### Сценарий 2: Просмотр расписания **Жилец:** ``` /график ``` **Бот:** ``` 📅 Расписание отключений 1. 💧 Плановое отключение воды └─ Тип: Вода └─ Начало: 27.02.2026 10:00 └─ Окончание: 27.02.2026 14:00 └─ Длительность: 4.0 ч. └─ Описание: Будут отключены стояки с 1 по 10 этаж 2. ⚡ Ремонт трансформатора └─ Тип: Электричество └─ Начало: 28.02.2026 09:00 └─ Окончание: 28.02.2026 17:00 └─ Длительность: 8.0 ч. ``` --- ### Сценарий 3: Напоминание за 1 час **За 1 час до события (автоматически):** **Бот пишет в чат:** ``` ⏰ Напоминание: отключение через 1 час! 💧 Плановое отключение воды 📅 Начало: 27.02.2026 10:00 📅 Окончание: 27.02.2026 14:00 ⏱️ Длительность: 4.0 ч. Не забудьте сделать запасы! ``` --- ### Сценарий 4: Удаление события **Админ:** ``` /schedule_del 1 ``` **Бот:** ``` ✅ Событие "Плановое отключение воды" удалено из расписания ``` --- ## 🗄️ База данных ### Таблица `schedules`: ```sql CREATE TABLE schedules ( schedule_id INTEGER PRIMARY KEY AUTOINCREMENT, schedule_type TEXT NOT NULL, -- water, electricity, heating... title TEXT NOT NULL, description TEXT, start_time TIMESTAMP NOT NULL, end_time TIMESTAMP NOT NULL, created_by BIGINT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, reminder_sent BOOLEAN DEFAULT 0, -- Отправлено ли напоминание is_active BOOLEAN DEFAULT 1, FOREIGN KEY (created_by) REFERENCES users(user_id) ) ``` ### Индексы: - `ix_schedules_type` — по типу - `ix_schedules_time` — по времени - `ix_schedules_active` — по статусу --- ## 🧪 Тестирование ### Чек-лист проверки: #### 1. Создание события ```bash # Админ: /schedule_add # Выбрать тип, название, время ``` - [ ] Меню типов отображается - [ ] Пошаговый ввод работает - [ ] Событие сохранено в БД #### 2. Просмотр расписания ```bash /график ``` - [ ] События отображаются - [ ] Emoji правильные - [ ] Длительность считается верно #### 3. Напоминание ```bash # Создать событие которое начнётся через 1-1.5 часа # Подождать до срабатывания планировщика ``` - [ ] Напоминание пришло за 1 час - [ ] `reminder_sent` установлен в True #### 4. Удаление ```bash # Админ: /schedule_del ``` - [ ] Событие удалено (is_active=False) --- ## 📁 Изменённые файлы | Файл | Изменения | |------|-----------| | `database/models.py` | Модель Schedule | | `database/migrate_add_schedules.py` | Миграция БД | | `handlers/schedule.py` | Хендлеры расписания | | `keyboards/inline.py` | Клавиатуры для расписания | | `services/scheduler.py` | Напоминания | | `handlers/__init__.py` | Импорт schedule_router | | `main.py` | Регистрация schedule_router | --- ## 🚀 Как использовать ### Для админа: 1. **Добавить событие:** ``` /schedule_add ``` Далее следуй инструкциям бота. 2. **Посмотреть расписание:** ``` /график ``` 3. **Удалить событие:** ``` /schedule_del 1 ``` ### Для жильца: 1. **Посмотреть расписание:** ``` /график ``` 2. **Получить напоминание:** - Автоматически за 1 час до начала --- ## 💡 Советы ### Типы отключений: | Тип | Когда использовать | |-----|-------------------| | 💧 Вода | Отключение ХВС/ГВС | | ⚡ Электричество | Ремонт сетей, трансформатора | | 🔥 Отопление | Сезонное отключение, ремонт | | 🔶 Газ | Профилактические работы | | 🛗 Лифт | Ремонт лифта | | 📋 Общее | Другие работы | ### Напоминания: - Бот проверяет напоминания **каждый час** - Напоминает **за 1 час** до начала - Если событие создано меньше чем за 1 час — напоминание не отправляется --- ## 🔧 Отладка ### Посмотреть события в БД: ```bash cd /home/matrixhasyou/domovoy_bot source venv/bin/activate sqlite3 database/domovoy.db SELECT schedule_id, schedule_type, title, start_time, end_time, reminder_sent FROM schedules WHERE is_active = 1 ORDER BY start_time; ``` ### Логи: ```bash tail -f logs/bot.log | grep -i "напомин\|schedule" ``` --- ## ✅ Преимущества | Было | Стало | |------|-------| | Объявления в чате | **Расписание в боте** | | Забывают про отключения | **Напоминание за 1 час** | | Нет истории | **Сохранение в БД** | | Ручное напоминание | **Авто-напоминания** | --- **Расписание отключений готово! 📅** *Следующий шаг: тестирование на тестовой группе и фиксация версии v1.4*