ErisPulse
Health Pass
- License — License: MIT
- Description — Repository has a description
- Active repo — Last push 0 days ago
- Community trust — 51 GitHub stars
Code Warn
- process.env — Environment variable access in .github/workflows/code-quality-check.yml
Permissions Pass
- Permissions — No dangerous permissions requested
No AI report is available for this listing yet.
Event-driven multi-platform bot framework with Dashboard, Docker, hot-reload & module marketplace | 事件驱动的多平台机器人框架 — 一次编写部署 QQ/Telegram/Kook/云湖/Matrix/邮件等 10+ 平台
English | 简体中文 | 繁體中文 | 日本語 | Русский
ErisPulse
Write once, deploy on multiple platforms.
Event-driven multi-platform chatbot development framework.
Based on the OneBot12 standard interface, write once and deploy on multiple platforms. Flexible plugin system, hot reload support, and a complete developer toolchain, suitable for various scenarios from simple chatbots to complex automation systems.
Core Features
Event-driven ArchitectureA clear event model based on the OneBot12 standard, making message handling logic more intuitive and efficient |
Cross-platform CompatibilityWrite plugin modules once and use them on all platforms, no need to repeat development for different platforms |
Modular DesignA flexible plugin system, easy to extend and integrate, supports hot-plug module management |
Hot ReloadReload code without restarting during development |
AI AssistanceAI-assisted development brings requirements directly to usable modules |
Lightweight and ElegantIntuitive API design, making code as light and readable as feathers |
The Same Code. Multiple Platforms.
Identical command handlers. Different platforms. No need to modify any business logic.
|
Kook
|
|
Yunhu
|
Ecosystem
ErisPulse is not just a framework. Install and start, no need to build wheels from scratch.
|
Framework Core runtime Unified event & message model |
Dashboard Visual management Plugins · Logs · Configuration |
AI Builder Natural language → Usable modules |
Module Market Ready-to-use plugins |
|
Adapters Support for 15+ platforms |
Documentation |
Docker Multi-architecture support
|
CLI
|
Project Origin
ErisPulse was not born to become a framework.
It originated from Amer — a project for message interconnection and synchronization between different platforms.
As more platforms were integrated, we began maintaining the asynchronous version of ryunhusdk2, and gradually abstracted a unified event model and adapter system.
These practices eventually evolved into today's ErisPulse.
Its goal has never changed:
Let developers focus on business, not platform differences.
Quick Start
One-click Installation Script (Recommended)
The installation script will automatically detect your environment (Docker, Python, uv), guide you to choose the most suitable installation method, and support multiple languages (Chinese/English/日本語/Русский/繁體中文).
Windows (PowerShell):
irm https://get.erisdev.com/install.ps1 -OutFile install.ps1; powershell -ExecutionPolicy Bypass -File install.ps1
macOS / Linux:
curl -fsSL https://get.erisdev.com/install.sh -o install.sh && chmod +x install.sh && ./install.sh
|
Docker Installation Demo |
pip Installation Demo |
Using Docker (Recommended)
docker pull erispulse/erispulse:latest
Docker Hub unavailable?
If Docker Hub is inaccessible, you can use GitHub Container Registry:
docker pull ghcr.io/erispulse/erispulse:latest
When using the ghcr.io image, you need to modify the docker-compose.yml image:
image: ghcr.io/erispulse/erispulse:latest
Quick Start
# Download docker-compose.yml
curl -O https://raw.githubusercontent.com/ErisPulse/ErisPulse/main/docker-compose.yml
# Set Dashboard login token and start
ERISPULSE_DASHBOARD_TOKEN=your-token docker compose up -d
The image includes the ErisPulse framework and Dashboard management panel, supporting
linux/amd64andlinux/arm64architectures.
After startup, access http://<host>:<port>/Dashboard and use the set token as the password to log in to the Dashboard management panel.
Set ERISPULSE_CHANNEL=dev to use the pre-release version:
# Method 1: Use environment variables (recommended)
ERISPULSE_CHANNEL=dev ERISPULSE_DASHBOARD_TOKEN=your-token docker compose up -d
# Method 2: Build dev image
ERISPULSE_BUILD_TARGET=dev docker compose up -d --build
To automatically update to the latest version at startup (regardless of stable or dev), explicitly set ERISPULSE_UPDATE_ON_START=true:
ERISPULSE_CHANNEL=dev ERISPULSE_UPDATE_ON_START=true docker compose up -d
You can also pull the pre-built dev image:
docker pull erispulse/erispulse:dev
Docker Environment Variables
| Variable | Default Value | Description |
|---|---|---|
ERISPULSE_CHANNEL |
stable |
Version channel: stable (stable) or dev (pre-release) |
ERISPULSE_UPDATE_ON_START |
false |
Whether to automatically update to the latest version when the container starts (must be explicitly enabled) |
ERISPULSE_DASHBOARD_TOKEN |
empty | Dashboard login token |
ERISPULSE_PORT |
8000 |
Dashboard port mapping |
TZ |
Asia/Shanghai |
Container timezone |
Enabling
ERISPULSE_UPDATE_ON_START=trueensures that even if the image is old, the container will automatically fetch the latest version at startup.
1Panel App Store
Install ErisPulse with one click through the 1Panel app store, see ErisPulse-1Panel.
bash <(curl -sL https://get-1panel.erisdev.com/install.sh)
ErisPulse is listed in the 1Panel third-party app store and can be installed using the third-party repository okxlin/appstore.
Using pip Installation
pip install ErisPulse
You can also use the one-click installation script above, which automatically detects the environment and guides configuration.
Initialize Project
# Interactive initialization
epsdk init
# Quick initialization (specify project name)
epsdk init -q -n my_bot
Create Your First Bot
Create a main.py file:
|
Command Handlers
|
Effect Explanation Send Bot replies: Send Bot replies: Running Method
|
For more detailed instructions, see:
Multi-turn Conversation Example
ErisPulse has a powerful built-in multi-turn conversation engine, making it easy to implement guided operations, information collection, and other interactive scenarios:
from ErisPulse.Core.Event import command, request
@command("register")
async def register_handler(event):
conv = event.conversation(timeout=60)
await conv.say("Welcome to register!")
# Multi-step collection of user information, with automatic validation
data = await conv.collect([
{"key": "name", "prompt": "Please enter your name"},
{"key": "age", "prompt": "Please enter your age",
"validator": lambda e: e.get_text().strip().isdigit(),
"retry_prompt": "Age must be a number, please re-enter"},
])
if data and await conv.confirm(f"Confirm registration? Name: {data['name']}, Age: {data['age']}"):
# Push notifications using SendDSL
await sdk.adapter.get(event.get_platform()).Send.To(
"user", event.get_user_id()
).Text(f"Registration successful! Welcome {data['name']}")
# Or await event.reply("Registration successful!")
# Automatically handle friend requests
@request.on_friend_request()
async def handle_friend_request(event):
user_name = event.get_user_nickname() or event.get_user_id()
# Approve the request
result = await event.approve()
if result.get("status") == "ok":
await event.reply(f"Friend request approved automatically, welcome {user_name}")
See More Conversation API (Branching / Selection / Persistence)
@command("quiz")
async def quiz_handler(event):
conv = event.conversation(timeout=30)
# Multiple-choice question
answer = await conv.choose("Who is the creator of Python?", [
"Guido van Rossum",
"James Gosling",
"Dennis Ritchie",
])
if answer == 0:
await conv.say("Correct!")
elif answer is None:
await conv.say("Timed out, try again next time!")
else:
await conv.say("Incorrect, the correct answer is Guido van Rossum")
@command("menu")
async def menu_handler(event):
conv = event.conversation(timeout=60)
# Branching, building complex interaction flow
@conv.branch("main")
async def main_menu():
await conv.say("=== Main Menu ===\n1. Personal Info\n2. Settings\n3. Exit")
resp = await conv.wait()
if resp and resp.get_text().strip() == "1":
await conv.goto("profile")
@conv.branch("profile")
async def profile():
await conv.say("Name: Alice\n0. Return")
resp = await conv.wait()
if resp and resp.get_text().strip() == "0":
await conv.goto("main")
await conv.start()
See Conversation Multi-turn Dialogue
Supported Platforms
We welcome contributions to adapters!
| Adapter | Description |
|---|---|
| Kook (Kaihei La) instant messaging platform | |
| Matrix decentralized communication protocol | |
OneBot11 |
OneBot v11 general robot protocol |
OneBot12 |
OneBot v12 standard protocol |
| Official QQ robot platform | |
Sandbox |
Web-based debugging, no need to connect to real platforms |
| Global instant messaging platform | |
| Email protocol adapter for sending and receiving | |
Yunhu |
Enterprise-level instant messaging platform (robot integration) |
Yunhu User |
Adapter based on the Yunhu user protocol |
| Flower Maple Café | Allons! (・ω・) / |
| Global community communication platform, supports servers, channels, and private messages | |
| General HTTP bridge adapter, connects to any system | |
| Official WeChat Official Account platform |
See Adapter Details
Application Scenarios
| Multi-platform Robot | Chat Assistant | Automation Tool | Message Forwarding |
|---|---|---|---|
| Deploy robots with the same functionality on multiple platforms | Integrate AI chat modules for entertainment and interaction | Message notifications, task management, data collection | Cross-platform message synchronization and forwarding |
Community
Welcome to join the ErisPulse community and collaborate with developers to build the ecosystem.
Yunhu
Group ID: 635409929
Join the group chat:
https://yhfx.jwznb.com/share?key=VWJL4fTWXepa&ts=1781889199
QQ Group
https://qm.qq.com/q/TOwnCmypcy
Telegram
Contribution Guidelines
The health of the ErisPulse project still needs your contribution! We welcome contributions in various forms:
- Report Issues — Submit bug reports in GitHub Issues
- Feature Requests — Propose new ideas via Community Discussions
- Code Contributions — Read the Code Style and Contribution Guidelines before submitting PRs
- Documentation Improvements — Help improve documentation and example code
Star History
Acknowledgments
Some code in this project is based on sdkFrame.
The core adapter standardization layer refers to and benefits from the OneBot12 specification.
Special thanks to the Yunhu ecosystem and community.
The early exploration and growth of ErisPulse would not have been possible without the support of the Yunhu developer community. Many ideas, adapters, and practical experiences originated here.
We also thank all developers and project authors who have contributed to ErisPulse, OneBot ecosystem, and the open-source community.
Reviews (0)
Sign in to leave a review.
Leave a reviewNo results found