1f553fa07eb93b0e52e3262e4658e8e528657322
Create and publish a Docker image / build-and-push-image (push) Successful in 2m32s
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и др.).InfrastructureData— хранение в SQLite (SqliteDealRepository,SqliteSubscriptionRepository, файл БДdata/pepper_bot.db).Pepper— клиент Pepper (IPepperClient/PepperClient).Telegram— вся работа с Telegram через библиотекуTelegram.Bot(TelegramNotifier).
PresentationBotWorker— фоновой воркер, который:- инициализирует репозитории;
- запускает работу
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.ymlhttp://0.0.0.0:8080).
Запуск локально (без Docker)
- Установите .NET SDK 10.0.
- В корне репозитория задайте переменные окружения (пример для PowerShell):
$env:TELEGRAM_BOT_TOKEN = "ваш_токен_бота"
$env:TELEGRAM_CHAT_ID = "ид_чата_для_общей_рассылки" # можно не задавать
- Запустите приложение:
cd PepperBot
dotnet run
Приложение поднимет HTTP‑сервер (endpoint /health) и запустит фонового воркера с Telegram‑ботом.
Запуск через Docker
В корне репозитория уже есть Dockerfile и docker-compose.yml.
Быстрый старт
- Задайте переменные окружения в системе или в
.envрядом сdocker-compose.yml:
TELEGRAM_BOT_TOKEN=ваш_токен_бота
TELEGRAM_CHAT_ID=ид_чата_для_общей_рассылки
- Запустите контейнер:
docker compose up -d --build
Что делает docker-compose.yml:
- собирает образ по
Dockerfile; - пробрасывает переменные окружения внутрь контейнера;
- монтирует
./dataна/app/data(там хранится SQLite‑база); - прокидывает порт
9001на8080контейнера (health‑endpoint будет доступен поhttp://localhost:9001/health).
Как пользоваться ботом в Telegram
- Создайте бота через
@BotFatherи пропишите его токен вTELEGRAM_BOT_TOKEN. - Запустите приложение (локально или в Docker).
- Откройте диалог с ботом в Telegram.
Меню управления подписками
- Отправьте
/menu— появится клавиатура:- Добавить подписку
- Бот попросит отправить одно или несколько ключевых слов.
- Пример:
PLA ABS, илиPLA, ABS, PETG. - Каждое слово станет отдельной подпиской.
- Список подписок
- Бот выведет все активные подписки в формате
[Id] keyword.
- Бот выведет все активные подписки в формате
- Удалить подписку
- Бот покажет inline‑кнопки по существующим подпискам.
- Нажмите на кнопку с нужным ключом — подписка будет деактивирована.
- Добавить подписку
Как приходят уведомления
- Раз в 30 секунд бот опрашивает Pepper.ru.
- Для каждой новой скидки:
- отправляет сообщение в общий чат (
TELEGRAM_CHAT_ID), если задан; - подбирает все подписки, у которых ключ входит в
TitleилиStoreNameскидки (без учёта регистра); - отправляет сообщение в соответствующие личные/групповые чаты.
- отправляет сообщение в общий чат (
Полезное для разработки
- Сборка:
cd PepperBot
dotnet build
- Запуск:
cd PepperBot
dotnet run
- БД
data/pepper_bot.dbсоздаётся автоматически при первом запуске.
Languages
C#
97%
Shell
1.7%
Dockerfile
1.3%