куфвьу
This commit is contained in:
@@ -0,0 +1,145 @@
|
|||||||
|
## PepperBot — Telegram‑бот для отслеживания скидок с Pepper.ru
|
||||||
|
|
||||||
|
PepperBot периодически опрашивает Pepper.ru, ищет новые скидки и отправляет их в Telegram:
|
||||||
|
- в **общий чат**, указанный в `TELEGRAM_CHAT_ID`;
|
||||||
|
- в **личные подписки пользователей** по ключевым словам.
|
||||||
|
|
||||||
|
Бот умеет управлять подписками прямо из Telegram через меню и кнопки.
|
||||||
|
|
||||||
|
### Возможности
|
||||||
|
|
||||||
|
- **Отправка новых скидок в Telegram**
|
||||||
|
- Формирование читаемого сообщения по скидке (цена, старая цена, процент скидки, магазин, ссылка).
|
||||||
|
- Отправка в общий канал/группу (`TELEGRAM_CHAT_ID`).
|
||||||
|
- **Персональные подписки по ключевым словам**
|
||||||
|
- Для каждой скидки ищутся совпадения по названию и магазину.
|
||||||
|
- Если совпало с ключевым словом подписки — скидка уходит в соответствующий чат.
|
||||||
|
- **Управление подписками через меню в Telegram**
|
||||||
|
- Команда `/menu` открывает меню с кнопками:
|
||||||
|
- `Добавить подписку`
|
||||||
|
- `Удалить подписку`
|
||||||
|
- `Список подписок`
|
||||||
|
- Добавление подписок по кейвордам.
|
||||||
|
- Удаление через inline‑кнопки.
|
||||||
|
- Просмотр всех активных подписок.
|
||||||
|
- **Health‑endpoint**
|
||||||
|
- `GET /health` — используется для проверки работоспособности (например, оркестратором).
|
||||||
|
|
||||||
|
### Архитектура (вкратце)
|
||||||
|
|
||||||
|
- `PepperBot` — единственный проект (консольное ASP.NET Core приложение).
|
||||||
|
- **Слои:**
|
||||||
|
- `Application` — интерфейсы и доменные сервисы (`DealService`, `ISubscriptionRepository`, `ITelegramNotifier` и т.п.).
|
||||||
|
- `Domain` — простые модели (`Deal`, `Subscription` и др.).
|
||||||
|
- `Infrastructure`
|
||||||
|
- `Data` — хранение в SQLite (`SqliteDealRepository`, `SqliteSubscriptionRepository`, файл БД `data/pepper_bot.db`).
|
||||||
|
- `Pepper` — клиент Pepper (`IPepperClient` / `PepperClient`).
|
||||||
|
- `Telegram` — вся работа с Telegram через библиотеку `Telegram.Bot` (`TelegramNotifier`).
|
||||||
|
- `Presentation`
|
||||||
|
- `BotWorker` — фоновой воркер, который:
|
||||||
|
- инициализирует репозитории;
|
||||||
|
- запускает работу `TelegramNotifier` (приём сообщений);
|
||||||
|
- каждые 30 секунд опрашивает Pepper и рассылает новые скидки.
|
||||||
|
|
||||||
|
### Зависимости
|
||||||
|
|
||||||
|
- .NET `10.0` (Target Framework: `net10.0`).
|
||||||
|
- ASP.NET Core (через `Microsoft.AspNetCore.App`).
|
||||||
|
- `Microsoft.Data.Sqlite` — для локальной БД.
|
||||||
|
- `Telegram.Bot` — работа с Telegram Bot API.
|
||||||
|
|
||||||
|
### Переменные окружения
|
||||||
|
|
||||||
|
- **`TELEGRAM_BOT_TOKEN`** — токен Telegram‑бота.
|
||||||
|
- **`TELEGRAM_CHAT_ID`** — ID чата/канала/группы для общей рассылки (можно оставить пустым, если общий канал не нужен).
|
||||||
|
- **`ASPNETCORE_URLS`** — адрес, на котором слушается HTTP (по умолчанию в `docker-compose.yml` `http://0.0.0.0:8080`).
|
||||||
|
|
||||||
|
### Запуск локально (без Docker)
|
||||||
|
|
||||||
|
1. Установите .NET SDK 10.0.
|
||||||
|
2. В корне репозитория задайте переменные окружения (пример для PowerShell):
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
$env:TELEGRAM_BOT_TOKEN = "ваш_токен_бота"
|
||||||
|
$env:TELEGRAM_CHAT_ID = "ид_чата_для_общей_рассылки" # можно не задавать
|
||||||
|
```
|
||||||
|
|
||||||
|
3. Запустите приложение:
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
cd PepperBot
|
||||||
|
dotnet run
|
||||||
|
```
|
||||||
|
|
||||||
|
Приложение поднимет HTTP‑сервер (endpoint `/health`) и запустит фонового воркера с Telegram‑ботом.
|
||||||
|
|
||||||
|
### Запуск через Docker
|
||||||
|
|
||||||
|
В корне репозитория уже есть `Dockerfile` и `docker-compose.yml`.
|
||||||
|
|
||||||
|
#### Быстрый старт
|
||||||
|
|
||||||
|
1. Задайте переменные окружения в системе или в `.env` рядом с `docker-compose.yml`:
|
||||||
|
|
||||||
|
```env
|
||||||
|
TELEGRAM_BOT_TOKEN=ваш_токен_бота
|
||||||
|
TELEGRAM_CHAT_ID=ид_чата_для_общей_рассылки
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Запустите контейнер:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker compose up -d --build
|
||||||
|
```
|
||||||
|
|
||||||
|
Что делает `docker-compose.yml`:
|
||||||
|
- собирает образ по `Dockerfile`;
|
||||||
|
- пробрасывает переменные окружения внутрь контейнера;
|
||||||
|
- монтирует `./data` на `/app/data` (там хранится SQLite‑база);
|
||||||
|
- прокидывает порт `9001` на `8080` контейнера (health‑endpoint будет доступен по `http://localhost:9001/health`).
|
||||||
|
|
||||||
|
### Как пользоваться ботом в Telegram
|
||||||
|
|
||||||
|
1. Создайте бота через `@BotFather` и пропишите его токен в `TELEGRAM_BOT_TOKEN`.
|
||||||
|
2. Запустите приложение (локально или в Docker).
|
||||||
|
3. Откройте диалог с ботом в Telegram.
|
||||||
|
|
||||||
|
#### Меню управления подписками
|
||||||
|
|
||||||
|
- Отправьте `/menu` — появится клавиатура:
|
||||||
|
- **Добавить подписку**
|
||||||
|
- Бот попросит отправить одно или несколько ключевых слов.
|
||||||
|
- Пример: `PLA ABS`, или `PLA, ABS, PETG`.
|
||||||
|
- Каждое слово станет отдельной подпиской.
|
||||||
|
- **Список подписок**
|
||||||
|
- Бот выведет все активные подписки в формате `[Id] keyword`.
|
||||||
|
- **Удалить подписку**
|
||||||
|
- Бот покажет inline‑кнопки по существующим подпискам.
|
||||||
|
- Нажмите на кнопку с нужным ключом — подписка будет деактивирована.
|
||||||
|
|
||||||
|
#### Как приходят уведомления
|
||||||
|
|
||||||
|
- Раз в 30 секунд бот опрашивает Pepper.ru.
|
||||||
|
- Для каждой новой скидки:
|
||||||
|
- отправляет сообщение в общий чат (`TELEGRAM_CHAT_ID`), если задан;
|
||||||
|
- подбирает все подписки, у которых ключ входит в `Title` или `StoreName` скидки (без учёта регистра);
|
||||||
|
- отправляет сообщение в соответствующие личные/групповые чаты.
|
||||||
|
|
||||||
|
### Полезное для разработки
|
||||||
|
|
||||||
|
- Сборка:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd PepperBot
|
||||||
|
dotnet build
|
||||||
|
```
|
||||||
|
|
||||||
|
- Запуск:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd PepperBot
|
||||||
|
dotnet run
|
||||||
|
```
|
||||||
|
|
||||||
|
- БД `data/pepper_bot.db` создаётся автоматически при первом запуске.
|
||||||
|
|
||||||
Reference in New Issue
Block a user