Удобный Telegram-бот и scrapper для агрегированной подписки на обновления из различных веб-ресурсов (GitHub, StackOverflow)
- Docker Compose
Из корня репозитория:docker‐compose up -d
Поднимет:
- PostgreSQL (порт 5433)
- Redis (порт 6379)
- Redis Insight (порт 8001)
- Zookeeper (порт 2181)
- Kafka-брокеры (порт 19092/29092)
- Kafka UI (порт 8084)
-
Инициализация схемы БД В папке
init/лежитinit.sql:-- создаёт роль scrapper_user и схему scrapper_schema, выдаёт все необходимые привилегииDocker-контейнер PostgreSQL автоматически выполнит эти скрипты при старте.
-
Запуск Scrapper-сервиса
-
Запуск 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|PARALLELapp.update.thread-count= число потоков (например, 4)app.update.batch-limit= максимальный размер батча (например, 1000)
- Переключение режимов:
- В Scrapper:
app.update.dispatcher-type=HTTP|KAFKA - Доступ к БД:
access-type=ORMилиSQL
- В Scrapper:
| Команда | Описание |
|---|---|
/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 |
отписаться от всех уведомлений и бота |
-
Swagger UI
- Bot –
http://localhost:8080/swagger-ui - Scrapper –
http://localhost:8081/swagger-ui
- Bot –
-
Kafka UI
http://localhost:8084– просмотр топиков и сообщений. -
Redis Insight
http://localhost:8001– мониторинг ключей дайджеста и кэша.