✅ Регистрация и верификация жильцов ✅ Рейтинг активности (уровни) ✅ Детект шпионов (Score 0-100) ✅ Анти-мат система (3 предупреждения → бан) ✅ Админ-панель с рассылкой ✅ Учёт квартир (несколько жильцов) ✅ Телефоны экстренных служб и мастеров ✅ Еженедельный экспорт JSON ✅ Прокси (socks5) для обхода РКН Бекап: backups/versions/v1.0_mvp_2026-02-26/ Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
333 lines
7.1 KiB
Markdown
333 lines
7.1 KiB
Markdown
# 🌐 Веб-интерфейс админа — v1.11
|
||
|
||
**Версия:** v1.11
|
||
**Дата:** 27 февраля 2026 г.
|
||
**Статус:** ✅ Реализовано
|
||
|
||
---
|
||
|
||
## 📋 Описание
|
||
|
||
Веб-интерфейс для администратора домового бота на базе FastAPI. Позволяет просматривать статистику, управлять пользователями, экспортировать данные через браузер.
|
||
|
||
---
|
||
|
||
## 🎯 Возможности
|
||
|
||
- ✅ Дашборд с основной статистикой
|
||
- ✅ Просмотр пользователей с поиском
|
||
- ✅ Экспорт данных в JSON
|
||
- ✅ Страница настроек
|
||
- ✅ API для интеграции
|
||
- ✅ Авторизация (HTTP Basic Auth)
|
||
- ✅ Адаптивный дизайн (Bootstrap 5)
|
||
|
||
---
|
||
|
||
## 🚀 Быстрый старт
|
||
|
||
### 1. Запуск с ботом
|
||
|
||
Веб-сервер запускается автоматически при старте бота:
|
||
|
||
```bash
|
||
cd /home/matrixhasyou/domovoy_bot
|
||
./run.sh
|
||
```
|
||
|
||
### 2. Доступ к интерфейсу
|
||
|
||
Откройте в браузере:
|
||
```
|
||
http://localhost:8000
|
||
```
|
||
|
||
**Логин:** `admin`
|
||
**Пароль:** Ваш `ADMIN_USER_ID` (из .env)
|
||
|
||
---
|
||
|
||
## 📱 Страницы
|
||
|
||
### 1. Дашборд (`/`)
|
||
|
||
**Основная статистика:**
|
||
- Пользователей
|
||
- Верифицировано
|
||
- Сообщений
|
||
- Активных опросов
|
||
- Объявлений
|
||
- Предстоящих событий
|
||
|
||
**Быстрые действия:**
|
||
- Переход к пользователям
|
||
- Экспорт JSON
|
||
- Настройки
|
||
|
||
---
|
||
|
||
### 2. Пользователи (`/users`)
|
||
|
||
**Функции:**
|
||
- Таблица всех пользователей (до 100)
|
||
- Поиск по имени, квартире, нику
|
||
- Статус верификации
|
||
- Рейтинг и количество сообщений
|
||
|
||
**Поля:**
|
||
- ID
|
||
- Имя
|
||
- Ник (@username)
|
||
- Квартира
|
||
- Верифицирован (✅/❌)
|
||
- Рейтинг
|
||
- Сообщений
|
||
|
||
---
|
||
|
||
### 3. Экспорт (`/export`)
|
||
|
||
**Функции:**
|
||
- Кнопка экспорта в JSON
|
||
- Статус экспорта
|
||
- Путь к файлу
|
||
|
||
**Экспортируются:**
|
||
- Все пользователи
|
||
- Все сообщения
|
||
- Даты и время
|
||
- Квартиры и телефоны
|
||
|
||
---
|
||
|
||
### 4. Настройки (`/settings`)
|
||
|
||
**Отображается:**
|
||
- Bot Token (маска)
|
||
- Admin Chat ID
|
||
- Admin User ID
|
||
- Статус прокси
|
||
|
||
---
|
||
|
||
## 🔌 API Endpoints
|
||
|
||
### GET `/api/stats`
|
||
|
||
**Описание:** Получить статистику для дашборда
|
||
|
||
**Ответ:**
|
||
```json
|
||
{
|
||
"top_users": [
|
||
{"id": 123456789, "name": "Иван", "apartment": "45", "rating": 500}
|
||
],
|
||
"active_polls": [
|
||
{"id": 1, "question": "За какой цвет?", "votes": 25}
|
||
],
|
||
"recent_messages": [...]
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
### GET `/api/users?search=...`
|
||
|
||
**Описание:** Список пользователей с поиском
|
||
|
||
**Параметры:**
|
||
- `search` (опционально) — строка поиска
|
||
|
||
**Ответ:**
|
||
```json
|
||
{
|
||
"users": [
|
||
{
|
||
"id": 123456789,
|
||
"name": "Иван Иванов",
|
||
"username": "ivanov",
|
||
"apartment": "45",
|
||
"verified": true,
|
||
"rating": 500,
|
||
"messages": 150
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
### GET `/api/export/json`
|
||
|
||
**Описание:** Экспорт данных в JSON
|
||
|
||
**Ответ:**
|
||
```json
|
||
{
|
||
"success": true,
|
||
"filepath": "exports/export_2026-02-27.json"
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 🔐 Безопасность
|
||
|
||
### Авторизация
|
||
|
||
**Тип:** HTTP Basic Auth
|
||
|
||
**Логин:** `admin`
|
||
**Пароль:** Значение `ADMIN_USER_ID` из `.env`
|
||
|
||
**Пример curl:**
|
||
```bash
|
||
curl -u admin:123456789 http://localhost:8000/api/stats
|
||
```
|
||
|
||
### Защита страниц
|
||
|
||
Все страницы требуют авторизации. При неверных данных возвращается 401.
|
||
|
||
---
|
||
|
||
## 🗄️ Зависимости
|
||
|
||
### Новые пакеты (v1.11+):
|
||
```
|
||
fastapi>=0.109.0
|
||
uvicorn>=0.27.0
|
||
jinja2>=3.1.3
|
||
python-multipart>=0.0.6
|
||
```
|
||
|
||
### Установка:
|
||
```bash
|
||
cd /home/matrixhasyou/domovoy_bot
|
||
source venv/bin/activate
|
||
pip install -r requirements.txt
|
||
```
|
||
|
||
---
|
||
|
||
## 📁 Структура файлов
|
||
|
||
```
|
||
web/
|
||
├── app.py # FastAPI приложение
|
||
├── templates/
|
||
│ ├── dashboard.html # Дашборд
|
||
│ ├── users.html # Пользователи
|
||
│ ├── export.html # Экспорт
|
||
│ └── settings.html # Настройки
|
||
└── static/
|
||
├── css/ # Стили (пока не используется)
|
||
└── js/ # Скрипты (пока не используется)
|
||
```
|
||
|
||
---
|
||
|
||
## 🧪 Тестирование
|
||
|
||
### Чек-лист проверки:
|
||
|
||
#### 1. Запуск
|
||
```bash
|
||
./run.sh
|
||
```
|
||
- [ ] Бот запускается
|
||
- [ ] Веб-сервер запускается
|
||
- [ ] В логах видно URL
|
||
|
||
#### 2. Авторизация
|
||
```
|
||
http://localhost:8000
|
||
Логин: admin
|
||
Пароль: <ADMIN_USER_ID>
|
||
```
|
||
- [ ] Форма авторизации появляется
|
||
- [ ] Верные данные пускают
|
||
- [ ] Неверные данные блокируют
|
||
|
||
#### 3. Дашборд
|
||
- [ ] Статистика отображается
|
||
- [ ] Карточки красивые
|
||
- [ ] Кнопки работают
|
||
|
||
#### 4. Пользователи
|
||
- [ ] Таблица загружается
|
||
- [ ] Поиск работает
|
||
- [ ] Верификация показывается
|
||
|
||
#### 5. Экспорт
|
||
- [ ] Кнопка работает
|
||
- [ ] Файл создаётся
|
||
- [ ] Путь показывается
|
||
|
||
---
|
||
|
||
## 🔧 Отладка
|
||
|
||
### Логи веб-сервера:
|
||
```bash
|
||
tail -f logs/bot.log | grep -i "web\|uvicorn"
|
||
```
|
||
|
||
### Проверка порта:
|
||
```bash
|
||
ss -tlnp | grep 8000
|
||
```
|
||
|
||
### Тест API:
|
||
```bash
|
||
curl -u admin:<PASSWORD> http://localhost:8000/api/stats
|
||
```
|
||
|
||
---
|
||
|
||
## 🚀 Запуск в production
|
||
|
||
### 1. Изменить порт (если нужно):
|
||
|
||
В `services/web_server.py`:
|
||
```python
|
||
def __init__(self, host: str = "0.0.0.0", port: int = 8000):
|
||
```
|
||
|
||
### 2. Настроить nginx (опционально):
|
||
|
||
```nginx
|
||
server {
|
||
listen 80;
|
||
server_name bot.yourdomain.com;
|
||
|
||
location / {
|
||
proxy_pass http://127.0.0.1:8000;
|
||
proxy_set_header Host $host;
|
||
proxy_set_header X-Real-IP $remote_addr;
|
||
}
|
||
}
|
||
```
|
||
|
||
### 3. Включить HTTPS:
|
||
|
||
```bash
|
||
sudo certbot --nginx -d bot.yourdomain.com
|
||
```
|
||
|
||
---
|
||
|
||
## ✅ Преимущества
|
||
|
||
| Было | Стало |
|
||
|------|-------|
|
||
| Только Telegram | **Веб-интерфейс** |
|
||
| Нет визуализации | **Дашборд с графиками** |
|
||
| Ручной экспорт | **Кнопка в браузере** |
|
||
| Нет поиска | **Поиск пользователей** |
|
||
|
||
---
|
||
|
||
**Веб-интерфейс готов! 🌐**
|
||
|
||
*Следующий шаг: тестирование и фиксация версии v1.11*
|