Skip to main content

Simple, open and extensible chat server with plugin system

Project description

🌟 Ember Chat — Простой, открытый и расширяемый мессенджер

Ember Chat — это минималистичный чат-сервер с архитектурой «ядро + плагины». Главная идея: максимальная простота ядра и бесконечная расширяемость через плагины.

Вы можете:

Общаться через CLI, веб, Telegram, LoRa, Bluetooth и любые другие транспорты.
Отправлять файлы, изображения, команды — всё через единый протокол.
Писать свои плагины за 10 минут и подключать их без перекомпиляции.

💡 Вдохновлён философией Unix: делай одну вещь хорошо, и позволяй другим инструментам дополнять тебя.

📦 Содержание

Основные возможности
Архитектура
Быстрый старт
Как писать плагины
Формат сообщений
Клиенты
Безопасность
Планы и дорожная карта
Лицензия

✨ Основные возможности

✅ Ядро < 100 строк — только рассылка сообщений.
✅ Автоматическая загрузка плагинов — просто положи .py-файл в папку.
✅ Единый JSON-протокол — совместимость между всеми клиентами.
✅ Поддержка файлов через встроенный HTTP-сервер.
✅ Готовые плагины: TCP (CLI), HTTP-файлы.
✅ Лёгкая интеграция с Telegram, LoRa, MQTT, Serial, WebSocket и др.

🧱 Архитектура

ember-chat/ ├── core/ # Ядро: broadcast, клиенты, обработка ├── plugins/ # Все плагины автоматически загружаются отсюда ├── clients/ # Примеры клиентов ├── config.yaml # Настройки плагинов (опционально) └── main.py # Точка входа

Принцип работы:

Ядро (core/server.py) управляет списком клиентов и рассылает сообщения.
Плагины подключаются к ядру и могут:
    вводить сообщения (например, из Telegram),
    выводить сообщения (например, в LoRa или файл),
    добавлять новых клиентов (TCP, WebSocket и т.д.).
Все сообщения передаются в едином формате JSON.

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

  1. Установка

bash git clone https://github.com/supminer/emberchat.git cd ember-chat pip install pyyaml # для поддержки config.yaml

  1. Запуск сервера

bash python main.py

Вы увидите:

[TCP Plugin] Слушаю 0.0.0.0:12345 [HTTP File Plugin] Запущен на порту 8000 [Main] Найдено плагинов: 2 ✅ tcp_transport активирован ✅ http_file_share активирован

[Ember Chat] Сервер запущен. Нажмите Ctrl+C для выхода.

  1. Запуск CLI-клиента

В новом терминале:

bash python clients/cli_client.py

Введите имя и начните чат! Отправьте файл командой: /sendfile /путь/к/файлу.

Файлы будут доступны по: http://localhost:8000/<имя_файла> 🔌 Как писать плагины Шаг 1. Создайте файл в plugins/

Например: plugins/my_plugin.py Шаг 2. Реализуйте функцию init_plugin(core, config=None)

python

plugins/example_logger.py

def init_plugin(core, config=None): print("[Logger Plugin] Активирован!")

def log_handler(core, message, source):
    # Эта функция вызывается при каждом входящем сообщении
    sender = message.get("from", "??")
    content = message.get("content", str(message))
    print(f"[LOG] {sender}: {content}")

# Подписываемся на все сообщения
core.add_message_handler(log_handler)

Шаг 3. (Опционально) Добавьте настройки в config.yaml

yaml

plugins: example_logger: verbose: true

Теперь config в init_plugin будет содержать {"verbose": true}. Шаг 4. Перезапустите сервер

Плагин загрузится автоматически! 📌 Типы плагинов Тип

Что делает

Пример Транспорт

Добавляет способ подключения клиентов

tcp_transport.py, websocket_ui.py Мост

Связывает чат с внешней системой

telegram_bridge.py, lora_gateway.py Обработчик

Реагирует на сообщения

auto_responder.py, logger.py Сервис

Предоставляет функционал (файлы, база и т.д.)

http_file_share.py 📨 Формат сообщений

Все сообщения — это словари Python, сериализованные в JSON. Обязательные поля:

from — имя отправителя (строка)
type — тип сообщения (например, "text", "file")



⚠️ Важно: бинарные данные (файлы) всегда кодируются в base64 при передаче через JSON.

💻 Клиенты

  1. CLI-клиент (clients/cli_client.py)

    Работает через TCP. Поддерживает текст и файлы (/sendfile).

  2. Собственные клиенты

Вы можете написать клиент на любом языке, если реализуете:

Подключение к TCP-порту.
Отправку: [4 байта длины][JSON в UTF-8].
Приём: чтение 4 байт → длина → чтение N байт → парсинг JSON.

Текущая версия:

Не имеет аутентификации.
Не шифрует трафик.
Доверяет всем входящим данным.

Рекомендации:

Используйте только во внутренней сети.
Для публичного доступа добавьте:
    TLS (через reverse proxy: nginx + Let's Encrypt)
    Авторизацию в плагине
    Валидацию входящих данных
Ограничьте размер файлов в http_file_share.py.

🗺️ Планы и дорожная карта

Плагин: WebSocket UI (красивый веб-чат)
Плагин: Telegram Bridge
Плагин: LoRa Gateway (ESP32 + Raspberry Pi)
Поддержка аккаунтов и истории
CLI-утилита для управления сервером
Docker-образ

📜 Лицензия

MIT License — делайте что угодно, сохраняя авторство. ❤️ Вдохновение

Этот проект создан для тех, кто верит, что:

Простота — залог надёжности, а открытость — двигатель прогресса.

Присоединяйся! Пиши плагины, делай форки, делись идеями.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ember_chat-0.1.0.tar.gz (12.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ember_chat-0.1.0-py3-none-any.whl (15.9 kB view details)

Uploaded Python 3

File details

Details for the file ember_chat-0.1.0.tar.gz.

File metadata

  • Download URL: ember_chat-0.1.0.tar.gz
  • Upload date:
  • Size: 12.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.11

File hashes

Hashes for ember_chat-0.1.0.tar.gz
Algorithm Hash digest
SHA256 8cb25a05740e6033441580227ad6c5d0a9e6efbae3952ba5964802dd448fb625
MD5 775ebaa621d865211e0f98a05b8fd17b
BLAKE2b-256 329cf7496ab0fc3dcc0aa3d5ac7ec6d0384c7881a591b0296440b9b66e6d3e3b

See more details on using hashes here.

File details

Details for the file ember_chat-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: ember_chat-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 15.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.11

File hashes

Hashes for ember_chat-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 5d6db41221e2a56529aed5ba53a745d5371a4a744bc4bc73a965b616205ab33e
MD5 d890d9d1e332df28797cc02ea7b9eda5
BLAKE2b-256 e69789553bd1d402b3892216b27cfdb9e4ff1f9e63bfe17ec1ddd608cd6dd98d

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page