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

428 lines
12 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.5
**Версия:** v1.5
**Дата:** 26 февраля 2026 г.
**Статус:** ✅ Реализовано
---
## 📋 Описание
Соседская доска объявлений — жильцы могут размещать объявления о продаже, покупке, отдаче вещей, поиске потерянного, услугах. Объявления публикуются в чате, хранятся 7 дней, затем автоматически удаляются.
---
## 🎯 Возможности
- ✅ 6 категорий объявлений (продам, куплю, отдам, потеряно, нашлось, услуга)
- ✅ Пошаговое создание (категория → название → описание → цена → телефон)
- ✅ Публикация в общем чате
- ✅ Авто-удаление через 7 дней
- ✅ Просмотр всех активных объявлений
- ✅ Удаление своих объявлений
- ✅ Только для верифицированных жильцов
- ✅ Модерация для админов
---
## 📱 Команды
### Для всех верифицированных:
| Команда | Описание | Пример |
|---------|----------|--------|
| `/ad` или `/объявление` | Создать объявление | `/ad` |
| `/ads` или `/доска` | Показать все объявления | `/ads` |
| `/ad_del <ID>` | Удалить своё объявление | `/ad_del 5` |
### Для админов:
| Команда | Описание | Пример |
|---------|----------|--------|
| `/ads_moderate` | Объявления на модерации | `/ads_moderate` |
| `/ad_approve <ID>` | Подтвердить объявление | `/ad_approve 5` |
---
## 🎯 Категории объявлений
| № | Категория | Emoji | Когда использовать |
|---|-----------|-------|-------------------|
| 1 | 💰 Продам | 💰 | Продажа вещей, мебели, техники |
| 2 | 🛒 Куплю | 🛒 | Поиск вещей для покупки |
| 3 | 🎁 Отдам | 🎁 | Отдам даром, бесплатно |
| 4 | 😿 Потеряно | 😿 | Потеряны вещи, животные |
| 5 | 😺 Нашлось | 😺 | Нашлись вещи, животные |
| 6 | 🔧 Услуга | 🔧 | Предложение услуг |
---
## 🎯 Сценарии использования
### Сценарий 1: Создание объявления (продам)
**1. Жилец пишет:**
```
/ad
```
**2. Бот показывает меню:**
```
📢 Создание объявления
Выберите категорию:
1⃣ 💰 Продам
2⃣ 🛒 Куплю
3⃣ 🎁 Отдам
4⃣ 😿 Потеряно
5⃣ 😺 Нашлось
6⃣ 🔧 Услуга
Или отправьте номер категории (1-6):
[кнопки с категориями]
```
**3. Жилец нажимает** `💰 Продам` **или отправляет** `1`
**4. Бот просит название:**
```
✅ Категория: 💰 Продам
Теперь отправьте название объявления:
Например: "Продам диван"
```
**5. Жилец отправляет:**
```
Продам диван угловой
```
**6. Бот просит описание:**
```
✅ Название: Продам диван угловой
Теперь отправьте описание:
Например: "Диван угловой, состояние хорошее, самовывоз"
```
**7. Жилец отправляет:**
```
Диван угловой, 2х спальный, состояние хорошее.
Есть небольшие следы использования.
Самовывоз с 5 этажа.
```
**8. Бот просит цену:**
```
✅ Описание принято
Укажите цену (в рублях) или отправьте "0" если бесплатно:
Например: 5000
```
**9. Жилец отправляет:**
```
5000
```
**10. Бот просит телефон:**
```
✅ Цена: 5000
Укажите контактный телефон или отправьте "пропустить":
Например: +7 (999) 123-45-67
```
**11. Жилец отправляет:**
```
+7 (999) 123-45-67
```
**12. Бот публикует объявление в чат:**
```
💰 Продам: Продам диван угловой
📝 Диван угловой, 2х спальный, состояние хорошее.
Есть небольшие следы использования.
Самовывоз с 5 этажа.
💰 Цена: 5000 ₽
📞 Телефон: +7 (999) 123-45-67
⏳ Действует до: 05.03.2026
🔖 ID: 1
```
**13. Жилец получает подтверждение:**
```
✅ Объявление опубликовано!
ID: 1
Действует до: 05.03.2026
Для просмотра: /ads
```
---
### Сценарий 2: Просмотр всех объявлений
**Жилец:**
```
/ads
```
**Бот:**
```
📢 Доска объявлений
1. 💰 Продам: Продам диван угловой
└─ Цена: 5000 ₽
└─ Действует до: 05.03.2026
└─ ID: 1
2. 🎁 Отдам: Отдам котёнка
└─ Цена: Бесплатно
└─ Действует до: 04.03.2026
└─ ID: 2
3. 🔧 Услуга: Ремонт сантехники
└─ Цена: 1000 ₽
└─ Действует до: 03.03.2026
└─ ID: 3
💡 Для создания: /ad
```
---
### Сценарий 3: Удаление своего объявления
**Жилец:**
```
/ad_del 1
```
**Бот:**
```
✅ Объявление "Продам диван угловой" удалено
```
**Объявление удаляется из чата и базы.**
---
### Сценарий 4: Объявление с модерацией
**Если включена модерация:**
1. Объявление создаётся но не публикуется
2. Админ получает уведомление
3. Админ: `/ads_moderate` — показывает неподтверждённые
4. Админ: `/ad_approve 1` — подтверждает
5. Объявление публикуется в чат
---
## 🗄️ База данных
### Таблица `ads`:
```sql
CREATE TABLE ads (
ad_id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id BIGINT NOT NULL,
category TEXT NOT NULL, -- sell, buy, give, lost, found, service
title TEXT NOT NULL,
description TEXT,
price INTEGER, -- Цена в рублях
phone TEXT, -- Контактный телефон
message_id BIGINT, -- ID сообщения в чате
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
expires_at TIMESTAMP, -- Дата истечения (через 7 дней)
is_active BOOLEAN DEFAULT 1,
is_moderated BOOLEAN DEFAULT 0, -- Проверено админом
FOREIGN KEY (user_id) REFERENCES users(user_id)
)
```
### Индексы:
- `ix_ads_category` — по категории
- `ix_ads_active` — по статусу
- `ix_ads_created_at` — по дате создания
---
## 🧪 Тестирование
### Чек-лист проверки:
#### 1. Создание объявления
```bash
# С верифицированного аккаунта:
/ad
# Выбрать категорию, название, описание, цену, телефон
```
- [ ] Меню категорий отображается
- [ ] Пошаговый ввод работает
- [ ] Объявление опубликовано в чат
- [ ] Сохранено в БД
#### 2. Проверка верификации
```bash
# С неверифицированного аккаунта:
/ad
```
- [ ] Бот отвечает "Только для верифицированных"
#### 3. Просмотр объявлений
```bash
/ads
```
- [ ] Объявления отображаются
- [ ] Emoji правильные
- [ ] Срок действия указан
#### 4. Удаление объявления
```bash
# Админ или автор:
/ad_del 1
```
- [ ] Объявление удалено
- [ ] Сообщение в чате удалено
#### 5. Авто-удаление
```bash
# Подождать 7 дней (или изменить expires_at в БД)
```
- [ ] Объявление деактивировано автоматически
---
## 📁 Изменённые файлы
| Файл | Изменения |
|------|-----------|
| `database/models.py` | Модель Ad |
| `database/migrate_add_ads.py` | Миграция БД |
| `handlers/ads.py` | Хендлеры объявлений |
| `keyboards/inline.py` | Клавиатуры для объявлений |
| `services/scheduler.py` | Авто-удаление |
| `handlers/__init__.py` | Импорт ads_router |
| `main.py` | Регистрация ads_router |
---
## 🚀 Как использовать
### Для жильца:
1. **Создать объявление:**
```
/ad
```
Далее следуй инструкциям бота.
2. **Посмотреть все объявления:**
```
/ads
```
3. **Удалить своё объявление:**
```
/ad_del 1
```
### Для админа:
1. **Проверить объявления на модерации:**
```
/ads_moderate
```
2. **Подтвердить объявление:**
```
/ad_approve 1
```
3. **Удалить любое объявление:**
```
/ad_del 1
```
---
## 💡 Советы
### Правила размещения:
**Разрешено:**
- Продажа личных вещей
- Отдача даром
- Поиск потерянного
- Предложение услуг соседям
**Запрещено:**
- Реклама магазинов
- Спам, мошенничество
- Недвижимость (не относится к дому)
- Услуги сторонних компаний
### Срок действия:
- **7 дней** — стандартный срок
- После истечения — авто-удаление
- Можно создать новое объявление
### Цена:
- Указывайте реальную цену
- "0" или "бесплатно" — для бесплатных вещей
- "Договорная" — в описании
---
## 🔧 Отладка
### Посмотреть объявления в БД:
```bash
cd /home/matrixhasyou/domovoy_bot
source venv/bin/activate
sqlite3 database/domovoy.db
SELECT ad_id, category, title, price, created_at, expires_at, is_active
FROM ads
ORDER BY created_at DESC LIMIT 10;
```
### Логи:
```bash
tail -f logs/bot.log | grep -i "объявлен\|ads"
```
### Авто-удаление (тест):
```bash
# В БД установить expires_at на вчера:
UPDATE ads SET expires_at=datetime('now', '-1 day') WHERE ad_id=1;
# Запустить очистку:
# (на следующее утро в 04:00 или вручную через scheduler)
```
---
## ✅ Преимущества
| Было | Стало |
|------|-------|
| Объявления в словах | **Структурированные объявления** |
| Забывают про объявления | **Авто-удаление через 7 дней** |
| Нет категорий | **6 категорий с emoji** |
| Не видно телефон | **Телефон в объявлении** |
| Нет модерации | **Модерация для админов** |
---
**Доска объявлений готова! 📢**
*Следующий шаг: тестирование на тестовой группе и фиксация версии v1.5*