Echo microservice multi protocol bot.
Состоит из двух сервисов: receiver и replayer, связь между сервисами осуществляется через RMQ.
Поддерживает одновременную работу через Telegram и Jabber.
Поддерживает две шины для обмена данными между сервисами - RabbitMQ и Redis.
Сервис принимающий сообщения от пользователя и отправляющий сообщение в шину данных.
Сервис принимающий сообщения из шины данных и отправляющий их обратно пользователю.
- Python >= 3.10.
- Docker, docker-compose.
Запускает инфраструктуру, собирает приложение, поднимает сервисы receiver и replayer.
- Скопировать файл
docker/docker-compose.app.yaml.exampleвdocker/docker-compose.app.yaml. - Отредактировать в нём параметры необходимые для подключения, согласно таблице ниже.
- Выполнить
make app
make install-deps.- Выставить переменные окружения согласно таблице ниже.
make infra- поднятие RMQ.make localилиpoetry run python -m app.
~- означает что переменная должна быть заполнена в зависимости от выбора используемых ботов.
| ENV | Description | Required | Default |
|---|---|---|---|
| BMQ_TG_API_ID | Telegram API ID | ~ | |
| BMQ_TG_API_HASH | Telegram API hash | ~ | |
| BMQ_TG_BOT_TOKEN | Telegram API token | ~ | |
| BMQ_JABBER_UID | Jabber UID | ~ | |
| BMQ_JABBER_PASSWORD | Jabber password | ~ | |
| BMQ_RMQ_DSN | Строка подключения к RMQ | - | amqp://user:password@127.0.0.1/ |
| BMQ_REDIS_DSN | Строка подключения к Redis | - | redis://localhost/ |
| BMQ_BOT_TYPE_USED | Тип используемых ботов, через ,, tg для Telegram jabber для Jabber |
- | tg,jabber |
| BMQ_APP_MODE | Режим работы приложения receiver или replayer |
- | receiver |
| BMQ_COMPRESSOR_TYPE | Тип сжатия сообщений, gzip или protobuf |
- | protobuf |
| BMQ_IDLE_TIMEOUT | Время простоя главного цикла в секундах | - | 1 |
| BMQ_LOG_LEVEL | Уровень логирования | - | INFO |
| BMQ_BUS_TYPE | Тип шины обмена данными rmq или redis. rmq - для RabbitMQ, redis для Redis |
- | rmq |
make lint
make proto
-
app.bus- Шина обмена данными между микросервисами.app.bus.IBus- Интерфейс шины обмена данными.app.bus.RabbitMqBus- Реализация шины, для обмена черезRabbitMQapp.bus.RedisBus- Реализация шины, для обмена черезRedis
-
app.compress- Реализация сжатия сообщений.app.compress.ICompressor- Интерфейс описывающий компрессор сообщений.capp.ompress.GzipCompressor- Реализация сжатия черезGzip. СжимаетJSONстроку в которую преобразуется_types.DtoMessageapp.compress.ProtobufCompressor- Реализация сжатия черезprotobuf. Генерится изproto.message.protoчерезmake proto
-
app.config- Конфигурация приложения загружаемая изENV -
app.domain- Основное приложение.app.domain.manager.Manager- Менеджер микросоервисов, отвечает за запуск в зависимости отconfig.app.APP_MODE, останов, и main Idle.app.domain,services.IService- Абстрактный класс, описывающий сервис.app.domain.servicers.ReceiverService- Сервис принимающий сообщения из im и передающий их вreplayerapp.domain.servicers.ReplayerService- Принимает сообщения отreceiverчерез шину, и отправляет обратно в im.
-
app.im- Реализация ботов для im.app.im.IBot- Интерфейс бота, бот должен уметь регистрировать callback на сообщениеregister_message_callbackи отвечатьreply. Методыbuildиdestroyпредназначены для инициализации / завершения, и имеют такие названия, что бы не пересекаться со стандартнымиstart/stop.app.im.TelegramBot- Реализация работы с Telegram im.app.im.JabberBot- Реализация работы с Jabber im.
-
app._types- Описание кастомных типов приложения,_в названии, нужна для корректной рабоды debug в Pycharm.