Skip to content

Repository files navigation

Удобный Telegram-бот и scrapper для агрегированной подписки на обновления из различных веб-ресурсов (GitHub, StackOverflow)


🚀 Запуск проекта

  1. Docker Compose
    Из корня репозитория:
    docker‐compose up -d

Поднимет:

  • PostgreSQL (порт 5433)
  • Redis (порт 6379)
  • Redis Insight (порт 8001)
  • Zookeeper (порт 2181)
  • Kafka-брокеры (порт 19092/29092)
  • Kafka UI (порт 8084)
  1. Инициализация схемы БД В папке init/ лежит init.sql:

    -- создаёт роль scrapper_user и схему scrapper_schema, выдаёт все необходимые привилегии

    Docker-контейнер PostgreSQL автоматически выполнит эти скрипты при старте.

  2. Запуск Scrapper-сервиса

  3. Запуск Telegram-бота


Архитектура

┌─────────────┐   Kafka / HTTP   ┌─────────────┐   Telegram API
│   Scrapper  ├────────────────► │     Bot     ├─────────► чат с пользователем
└─────────────┘                  └─────────────┘
       │                               │
       │                               │
       └──────────► PostgreSQL         └──────────► Redis 
  • Bot – регистрация пользователей, FSM-диалог, управление подписками и настройками.
  • Scrapper – периодический (многопоточный) опрос API GitHub/StackOverflow, отправка событий.

Функционал

  • Асинхронная доставка уведомлений через Apache Kafka или синхронно по HTTP (настраивается).
  • Кэширование команды /list и /links_by_tag в Redis с TTL 10 минут.
  • Режимы уведомлений:
    • Immediate: уведомления сразу при обнаружении.
    • Daily Digest: сбор в Redis и отправка одним сообщением по расписанию.
  • Батчинг и многопоточность в Scrapper:
    • app.update.processor-type = SEQUENTIAL | PARALLEL
    • app.update.thread-count = число потоков (например, 4)
    • app.update.batch-limit = максимальный размер батча (например, 1000)
  • Переключение режимов:
    • В Scrapper: app.update.dispatcher-type = HTTP | KAFKA
    • Доступ к БД: access-type = ORM или SQL

Команды Telegram-бота

Команда Описание
/start регистрация пользователя
/help список доступных команд
/track → ссылка добавить отслеживаемую ссылку
/untrack → ссылка убрать ссылку из подписок
/list все текущие подписки
/add_tag → тег, ссылка привязать тег к ссылке
/delete_tag → тег, ссылка удалить тег
/links_by_tag → тег список ссылок по тегу
/delete_links_by_tag→тег удалить все ссылки указанного тега
/get_mode показать текущий режим уведомлений
/set_immediate переключить на мгновенные уведомления
/set_daily_digest переключить на ежедневный дайджест
/set_digest_hour → час установить час отправки дайджеста
/unregister отписаться от всех уведомлений и бота

Как проверить работу

  1. Swagger UI

    • Bot – http://localhost:8080/swagger-ui
    • Scrapper – http://localhost:8081/swagger-ui
  2. Kafka UI http://localhost:8084 – просмотр топиков и сообщений.

  3. Redis Insight http://localhost:8001 – мониторинг ключей дайджеста и кэша.

About

A Telegram bot and high-throughput scraper that aggregates updates from GitHub and another into a single. It supports Kafka or HTTP delivery, Redis-powered caching and flexible notification modes from instant alerts to scheduled summaries.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages