domovoy_bot/РАСПИСАНИЕ_ОТКЛЮЧЕНИЙ.md
Admin ba4676b0af v1.0 MVP - Инициализация проекта 🏠
 Регистрация и верификация жильцов
 Рейтинг активности (уровни)
 Детект шпионов (Score 0-100)
 Анти-мат система (3 предупреждения → бан)
 Админ-панель с рассылкой
 Учёт квартир (несколько жильцов)
 Телефоны экстренных служб и мастеров
 Еженедельный экспорт JSON
 Прокси (socks5) для обхода РКН

Бекап: backups/versions/v1.0_mvp_2026-02-26/

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-27 10:54:16 +00:00

370 lines
10 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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.

# 📅 Расписание отключений — v1.4
**Версия:** v1.4
**Дата:** 26 февраля 2026 г.
**Статус:** ✅ Реализовано
---
## 📋 Описание
Система управления расписанием плановых отключений (вода, свет, отопление, газ, лифт). Админ создаёт события, бот напоминает за 1 час до начала, жильцы всегда в курсе отключений.
---
## 🎯 Возможности
- ✅ Создание событий с типом, названием, временем
- ✅ 6 типов отключений (вода, свет, отопление, газ, лифт, общее)
- ✅ Inline-меню для выбора типа
- ✅ Пошаговое создание (тип → название → время → описание)
- ✅ Просмотр расписания командой `/график`
- ✅ Напоминание за 1 час до начала (авто)
- ✅ Удаление событий из расписания
- ✅ Emoji для каждого типа
---
## 📱 Команды
### Для администраторов:
| Команда | Описание | Пример |
|---------|----------|--------|
| `/schedule_add` | Добавить событие в расписание | `/schedule_add` |
| `/schedule_del <ID>` | Удалить событие по 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 <ID>
```
- [ ] Событие удалено (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*