monster 230359a6ac
Create and publish a Docker image / build-and-push-image (push) Failing after 12m25s
test: run3
2026-08-08 13:04:10 +03:00
upd
2026-03-11 13:10:31 +03:00
fix
2026-03-10 12:39:21 +00:00
upd
2026-03-10 16:00:37 +03:00
2026-03-10 16:34:36 +03:00
ok
2026-03-10 14:23:42 +03:00
ok
2026-03-10 14:23:42 +03:00

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):
$env:TELEGRAM_BOT_TOKEN = "ваш_токен_бота"
$env:TELEGRAM_CHAT_ID = "ид_чата_для_общей_рассылки" # можно не задавать
  1. Запустите приложение:
cd PepperBot
dotnet run

Приложение поднимет HTTP‑сервер (endpoint /health) и запустит фонового воркера с Telegram‑ботом.

Запуск через Docker

В корне репозитория уже есть Dockerfile и docker-compose.yml.

Быстрый старт

  1. Задайте переменные окружения в системе или в .env рядом с docker-compose.yml:
TELEGRAM_BOT_TOKEN=ваш_токен_бота
TELEGRAM_CHAT_ID=ид_чата_для_общей_рассылки
  1. Запустите контейнер:
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 скидки (без учёта регистра);
    • отправляет сообщение в соответствующие личные/групповые чаты.

Полезное для разработки

  • Сборка:
cd PepperBot
dotnet build
  • Запуск:
cd PepperBot
dotnet run
  • БД data/pepper_bot.db создаётся автоматически при первом запуске.
S
Description
No description provided
Readme
15 MiB
Languages
C# 97%
Shell 1.7%
Dockerfile 1.3%