Skip to content

exclusiveLogin/BHBot

Repository files navigation

BHBot — Telegram Notification Bot

Telegram-бот для рассылки уведомлений подписчикам. Написан на TypeScript, поддерживает подписку/отписку через inline-кнопки, событийно-управляемую рассылку через очередь из базы данных MySQL.

Возможности

  • Подписка / отписка — пользователи управляют подпиской через Telegram inline-кнопки (/subscribe, /unsubscribe)
  • Broadcast рассылка — отправка сообщений всем активным подписчикам с задержкой между сообщениями (flood protection)
  • EventDispatcher — фоновый цикл опроса MySQL, забирает pending-сообщения порциями и публикует через RxJS Subject
  • MySQL интеграция — connection pool, Observable-обёртки над mysql (queryList, queryOnceOfList, query)
  • PM2 readyecosystem.config.js настроен для продакшн-деплоя
  • Dockercompose-dev.yaml для локальной разработки
  • Secrets management.env.vault для безопасного хранения токенов

Архитектура

BHBot/
├── bot/
│   ├── bhbot.ts           # Основной класс бота (Telegraf): handlers, subscribe/unsubscribe, broadcast
│   └── bhbot.model.ts     # Интерфейсы BotConfig
├── events/
│   ├── driver.ts          # EventDispatcher — RxJS-управляемый polling MySQL очереди сообщений
│   └── config.ts          # BotEvent, EventDispatcherConfig типы
├── sql/
│   ├── sql.ts             # DataBaseService — Observable MySQL pool (createPool)
│   └── sql.config.ts      # Параметры подключения
├── index.ts               # Точка входа — инициализация BHBot, EventDispatcher, DataBaseService
├── ecosystem.config.js    # PM2 конфиг
└── compose-dev.yaml       # Docker Compose для разработки

Стек технологий

Технология Использование
TypeScript Основной язык
Telegraf Telegram Bot API wrapper
RxJS EventDispatcher (Subject, Observable)
MySQL / mysql pool Хранение очереди сообщений
PM2 Process manager (продакшн)
Docker Compose Разработка
dotenv-vault Управление секретами

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

# Установка зависимостей
npm install

# Настройка переменных окружения
cp .env.vault .env
# заполнить BHBOTTOKEN=<telegram_bot_token>

# Разработка (с автоперезагрузкой)
npm run dev

# Продакшн через PM2
pm2 start ecosystem.config.js

Схема работы EventDispatcher

MySQL (bot_messages) → polling каждые 30s → порция BotEvent[]
                                           → RxJS Subject → broadcast подписчикам

Статусы сообщений в БД: pendingsending → (delivered)

About

Telegram notification bot — TypeScript, Telegraf, RxJS event dispatcher, MySQL queue, PM2

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors