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.
🚀 Быстрый старт
- Установка
bash git clone https://github.com/supminer/emberchat.git cd ember-chat pip install pyyaml # для поддержки config.yaml
- Запуск сервера
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 для выхода.
- Запуск 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.
💻 Клиенты
-
CLI-клиент (clients/cli_client.py)
Работает через TCP. Поддерживает текст и файлы (/sendfile).
-
Собственные клиенты
Вы можете написать клиент на любом языке, если реализуете:
Подключение к 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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8cb25a05740e6033441580227ad6c5d0a9e6efbae3952ba5964802dd448fb625
|
|
| MD5 |
775ebaa621d865211e0f98a05b8fd17b
|
|
| BLAKE2b-256 |
329cf7496ab0fc3dcc0aa3d5ac7ec6d0384c7881a591b0296440b9b66e6d3e3b
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5d6db41221e2a56529aed5ba53a745d5371a4a744bc4bc73a965b616205ab33e
|
|
| MD5 |
d890d9d1e332df28797cc02ea7b9eda5
|
|
| BLAKE2b-256 |
e69789553bd1d402b3892216b27cfdb9e4ff1f9e63bfe17ec1ddd608cd6dd98d
|