✅ Регистрация и верификация жильцов ✅ Рейтинг активности (уровни) ✅ Детект шпионов (Score 0-100) ✅ Анти-мат система (3 предупреждения → бан) ✅ Админ-панель с рассылкой ✅ Учёт квартир (несколько жильцов) ✅ Телефоны экстренных служб и мастеров ✅ Еженедельный экспорт JSON ✅ Прокси (socks5) для обхода РКН Бекап: backups/versions/v1.0_mvp_2026-02-26/ Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
10 KiB
📅 Расписание отключений — 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:
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. Создание события
# Админ:
/schedule_add
# Выбрать тип, название, время
- Меню типов отображается
- Пошаговый ввод работает
- Событие сохранено в БД
2. Просмотр расписания
/график
- События отображаются
- Emoji правильные
- Длительность считается верно
3. Напоминание
# Создать событие которое начнётся через 1-1.5 часа
# Подождать до срабатывания планировщика
- Напоминание пришло за 1 час
reminder_sentустановлен в True
4. Удаление
# Админ:
/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 |
🚀 Как использовать
Для админа:
-
Добавить событие:
/schedule_addДалее следуй инструкциям бота.
-
Посмотреть расписание:
/график -
Удалить событие:
/schedule_del 1
Для жильца:
-
Посмотреть расписание:
/график -
Получить напоминание:
- Автоматически за 1 час до начала
💡 Советы
Типы отключений:
| Тип | Когда использовать |
|---|---|
| 💧 Вода | Отключение ХВС/ГВС |
| ⚡ Электричество | Ремонт сетей, трансформатора |
| 🔥 Отопление | Сезонное отключение, ремонт |
| 🔶 Газ | Профилактические работы |
| 🛗 Лифт | Ремонт лифта |
| 📋 Общее | Другие работы |
Напоминания:
- Бот проверяет напоминания каждый час
- Напоминает за 1 час до начала
- Если событие создано меньше чем за 1 час — напоминание не отправляется
🔧 Отладка
Посмотреть события в БД:
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;
Логи:
tail -f logs/bot.log | grep -i "напомин\|schedule"
✅ Преимущества
| Было | Стало |
|---|---|
| Объявления в чате | Расписание в боте |
| Забывают про отключения | Напоминание за 1 час |
| Нет истории | Сохранение в БД |
| Ручное напоминание | Авто-напоминания |
Расписание отключений готово! 📅
Следующий шаг: тестирование на тестовой группе и фиксация версии v1.4