ErisPulse 2.4.3.dev1__tar.gz → 2.4.5__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/PKG-INFO +53 -2
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/README.md +52 -1
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/pyproject.toml +1 -1
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/CLI/cli.py +4 -1
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/CLI/cli.pyi +1 -1
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/CLI/commands/init.py +123 -25
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/CLI/commands/install.py +59 -74
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/CLI/commands/install.pyi +0 -7
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/CLI/commands/run.py +70 -17
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/CLI/commands/run.pyi +5 -5
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/CLI/commands/self_update.py +1 -6
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/CLI/commands/self_update.pyi +0 -1
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/CLI/commands/uninstall.py +1 -9
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/CLI/commands/uninstall.pyi +0 -1
- erispulse-2.4.5/src/ErisPulse/CLI/console.py +84 -0
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/CLI/console.pyi +3 -0
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/CLI/registry.py +1 -1
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/CLI/utils/package_manager.py +333 -541
- erispulse-2.4.5/src/ErisPulse/CLI/utils/package_manager.pyi +105 -0
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/Core/Bases/adapter.py +12 -3
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/Core/Event/command.py +19 -5
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/Core/Event/wrapper.py +245 -14
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/Core/Event/wrapper.pyi +123 -3
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/Core/__init__.py +12 -3
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/Core/__init__.pyi +4 -3
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/Core/adapter.py +31 -39
- erispulse-2.4.5/src/ErisPulse/Core/config.py +630 -0
- erispulse-2.4.5/src/ErisPulse/Core/config.pyi +175 -0
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/Core/lifecycle.py +5 -3
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/Core/lifecycle.pyi +9 -0
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/Core/logger.py +44 -30
- erispulse-2.4.5/src/ErisPulse/Core/metrics.py +489 -0
- erispulse-2.4.5/src/ErisPulse/Core/metrics.pyi +302 -0
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/Core/module.py +15 -1
- erispulse-2.4.5/src/ErisPulse/Core/router.py +1234 -0
- erispulse-2.4.5/src/ErisPulse/Core/router.pyi +451 -0
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/Core/storage.py +15 -8
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/Core/storage.pyi +4 -0
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/__init__.py +1 -0
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/__init__.pyi +1 -1
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/finders/bases/finder.py +15 -11
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/finders/bases/finder.pyi +1 -0
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/loaders/adapter.py +15 -8
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/loaders/bases/loader.py +3 -3
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/loaders/module.py +199 -54
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/loaders/module.pyi +1 -3
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/loaders/strategy.py +1 -1
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/runtime/exceptions.py +9 -9
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/runtime/frame_config.py +34 -12
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/runtime/frame_config.pyi +11 -0
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/sdk.py +80 -40
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/sdk.pyi +4 -0
- erispulse-2.4.3.dev1/src/ErisPulse/CLI/console.py +0 -48
- erispulse-2.4.3.dev1/src/ErisPulse/CLI/utils/package_manager.pyi +0 -250
- erispulse-2.4.3.dev1/src/ErisPulse/Core/config.py +0 -333
- erispulse-2.4.3.dev1/src/ErisPulse/Core/config.pyi +0 -80
- erispulse-2.4.3.dev1/src/ErisPulse/Core/router.py +0 -569
- erispulse-2.4.3.dev1/src/ErisPulse/Core/router.pyi +0 -174
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/.gitignore +0 -0
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/LICENSE +0 -0
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/CLI/__init__.py +0 -0
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/CLI/__init__.pyi +0 -0
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/CLI/base.py +0 -0
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/CLI/base.pyi +0 -0
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/CLI/commands/__init__.py +0 -0
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/CLI/commands/__init__.pyi +0 -0
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/CLI/commands/init.pyi +0 -0
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/CLI/commands/list.py +0 -0
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/CLI/commands/list.pyi +0 -0
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/CLI/commands/list_remote.py +0 -0
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/CLI/commands/list_remote.pyi +0 -0
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/CLI/commands/upgrade.py +0 -0
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/CLI/commands/upgrade.pyi +0 -0
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/CLI/registry.pyi +0 -0
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/CLI/utils/__init__.py +0 -0
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/CLI/utils/__init__.pyi +0 -0
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/Core/Bases/__init__.py +0 -0
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/Core/Bases/__init__.pyi +0 -0
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/Core/Bases/adapter.pyi +0 -0
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/Core/Bases/manager.py +0 -0
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/Core/Bases/manager.pyi +0 -0
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/Core/Bases/module.py +0 -0
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/Core/Bases/module.pyi +0 -0
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/Core/Bases/storage.py +0 -0
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/Core/Bases/storage.pyi +0 -0
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/Core/Event/__init__.py +0 -0
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/Core/Event/__init__.pyi +0 -0
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/Core/Event/base.py +0 -0
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/Core/Event/base.pyi +0 -0
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/Core/Event/command.pyi +0 -0
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/Core/Event/message.py +0 -0
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/Core/Event/message.pyi +0 -0
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/Core/Event/message_builder.py +0 -0
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/Core/Event/message_builder.pyi +0 -0
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/Core/Event/meta.py +0 -0
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/Core/Event/meta.pyi +0 -0
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/Core/Event/notice.py +0 -0
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/Core/Event/notice.pyi +0 -0
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/Core/Event/request.py +0 -0
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/Core/Event/request.pyi +0 -0
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/Core/Event/session_type.py +0 -0
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/Core/Event/session_type.pyi +0 -0
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/Core/adapter.pyi +0 -0
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/Core/logger.pyi +0 -0
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/Core/module.pyi +0 -0
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/__main__.py +0 -0
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/__main__.pyi +0 -0
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/finders/__init__.py +0 -0
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/finders/__init__.pyi +0 -0
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/finders/adapter.py +0 -0
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/finders/adapter.pyi +0 -0
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/finders/bases/__init__.py +0 -0
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/finders/bases/__init__.pyi +0 -0
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/finders/module.py +0 -0
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/finders/module.pyi +0 -0
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/loaders/__init__.py +0 -0
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/loaders/__init__.pyi +0 -0
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/loaders/adapter.pyi +0 -0
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/loaders/bases/__init__.py +0 -0
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/loaders/bases/__init__.pyi +0 -0
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/loaders/bases/loader.pyi +0 -0
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/loaders/strategy.pyi +0 -0
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/runtime/__init__.py +0 -0
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/runtime/__init__.pyi +0 -0
- {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/runtime/exceptions.pyi +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ErisPulse
|
|
3
|
-
Version: 2.4.
|
|
3
|
+
Version: 2.4.5
|
|
4
4
|
Summary: ErisPulse 是一个模块化、可扩展的异步 Python SDK 框架,主要用于构建高效、可维护的机器人应用程序。
|
|
5
5
|
Author-email: ErisDev <erisdev@88.com>
|
|
6
6
|
Maintainer-email: "艾莉丝·格雷拉特(WSu2059)" <wsu2059@qq.com>
|
|
@@ -79,7 +79,7 @@ Description-Content-Type: text/markdown
|
|
|
79
79
|
<table>
|
|
80
80
|
<tr>
|
|
81
81
|
<td width="35%" valign="middle" align="center">
|
|
82
|
-
<img src=".github/assets/
|
|
82
|
+
<img src=".github/assets/erispulse_logo_hp.png" width="280" alt="ErisPulse" />
|
|
83
83
|
</td>
|
|
84
84
|
<td width="65%" valign="middle">
|
|
85
85
|
|
|
@@ -127,6 +127,7 @@ ErisPulse 是一个基于 Python 的事件驱动型多平台机器人开发框
|
|
|
127
127
|
| [邮件](https://github.com/ErisPulse/ErisPulse-EmailAdapter) | 邮件协议收发适配器 |
|
|
128
128
|
| [云湖](https://github.com/ErisPulse/ErisPulse-YunhuAdapter) | 企业级即时通讯平台(机器人接入) |
|
|
129
129
|
| [云湖用户](https://github.com/wsu2059q/ErisPulse-YunhuUserAdapter) | 基于云湖用户协议的接入适配器 |
|
|
130
|
+
| [花枫咖啡馆](https://github.com/ErisPulse/ErisPulse-Ideaura/) | Allons! \(・ω・) / |
|
|
130
131
|
|
|
131
132
|
查看 [适配器详情介绍](docs/zh-CN/platform-guide/README.md)
|
|
132
133
|
|
|
@@ -171,6 +172,56 @@ ERISPULSE_DASHBOARD_TOKEN=your-token docker compose up -d
|
|
|
171
172
|
|
|
172
173
|
</details>
|
|
173
174
|
|
|
175
|
+
<details>
|
|
176
|
+
<summary>使用预发布版本 (Dev)</summary>
|
|
177
|
+
|
|
178
|
+
设置 `ERISPULSE_CHANNEL=dev` 即可使用预发布版本:
|
|
179
|
+
|
|
180
|
+
```bash
|
|
181
|
+
# 方式一:使用环境变量(推荐)
|
|
182
|
+
ERISPULSE_CHANNEL=dev ERISPULSE_DASHBOARD_TOKEN=your-token docker compose up -d
|
|
183
|
+
|
|
184
|
+
# 方式二:构建 dev 镜像
|
|
185
|
+
ERISPULSE_BUILD_TARGET=dev docker compose up -d --build
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
如需启动时自动更新到最新版本(无论 stable 还是 dev),显式设置 `ERISPULSE_UPDATE_ON_START=true`:
|
|
189
|
+
|
|
190
|
+
```bash
|
|
191
|
+
ERISPULSE_CHANNEL=dev ERISPULSE_UPDATE_ON_START=true docker compose up -d
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
也可以拉取预构建的 dev 镜像:
|
|
195
|
+
|
|
196
|
+
```bash
|
|
197
|
+
docker pull erispulse/erispulse:dev
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
</details>
|
|
201
|
+
|
|
202
|
+
<details>
|
|
203
|
+
<summary>Docker 环境变量</summary>
|
|
204
|
+
|
|
205
|
+
| 变量 | 默认值 | 说明 |
|
|
206
|
+
|------|--------|------|
|
|
207
|
+
| `ERISPULSE_CHANNEL` | `stable` | 版本通道:`stable`(稳定版)或 `dev`(预发布版) |
|
|
208
|
+
| `ERISPULSE_UPDATE_ON_START` | `false` | 容器启动时是否自动更新到最新版本(需显式启用) |
|
|
209
|
+
| `ERISPULSE_DASHBOARD_TOKEN` | 空 | Dashboard 登录令牌 |
|
|
210
|
+
| `ERISPULSE_PORT` | `8000` | Dashboard 端口映射 |
|
|
211
|
+
| `TZ` | `Asia/Shanghai` | 容器时区 |
|
|
212
|
+
|
|
213
|
+
> 启用 `ERISPULSE_UPDATE_ON_START=true` 可确保即使镜像较旧,容器也能在启动时自动获取最新版本。
|
|
214
|
+
|
|
215
|
+
</details>
|
|
216
|
+
|
|
217
|
+
### 1Panel 应用商店
|
|
218
|
+
|
|
219
|
+
通过 [1Panel](https://1panel.cn) 应用商店一键安装 ErisPulse,详见 [ErisPulse-1Panel](https://github.com/ErisPulse/ErisPulse-1Panel)。
|
|
220
|
+
|
|
221
|
+
```bash
|
|
222
|
+
bash <(curl -sL https://get-1panel.erisdev.com/install.sh)
|
|
223
|
+
```
|
|
224
|
+
|
|
174
225
|
### 使用 pip 安装
|
|
175
226
|
|
|
176
227
|
```bash
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
<table>
|
|
8
8
|
<tr>
|
|
9
9
|
<td width="35%" valign="middle" align="center">
|
|
10
|
-
<img src=".github/assets/
|
|
10
|
+
<img src=".github/assets/erispulse_logo_hp.png" width="280" alt="ErisPulse" />
|
|
11
11
|
</td>
|
|
12
12
|
<td width="65%" valign="middle">
|
|
13
13
|
|
|
@@ -55,6 +55,7 @@ ErisPulse 是一个基于 Python 的事件驱动型多平台机器人开发框
|
|
|
55
55
|
| [邮件](https://github.com/ErisPulse/ErisPulse-EmailAdapter) | 邮件协议收发适配器 |
|
|
56
56
|
| [云湖](https://github.com/ErisPulse/ErisPulse-YunhuAdapter) | 企业级即时通讯平台(机器人接入) |
|
|
57
57
|
| [云湖用户](https://github.com/wsu2059q/ErisPulse-YunhuUserAdapter) | 基于云湖用户协议的接入适配器 |
|
|
58
|
+
| [花枫咖啡馆](https://github.com/ErisPulse/ErisPulse-Ideaura/) | Allons! \(・ω・) / |
|
|
58
59
|
|
|
59
60
|
查看 [适配器详情介绍](docs/zh-CN/platform-guide/README.md)
|
|
60
61
|
|
|
@@ -99,6 +100,56 @@ ERISPULSE_DASHBOARD_TOKEN=your-token docker compose up -d
|
|
|
99
100
|
|
|
100
101
|
</details>
|
|
101
102
|
|
|
103
|
+
<details>
|
|
104
|
+
<summary>使用预发布版本 (Dev)</summary>
|
|
105
|
+
|
|
106
|
+
设置 `ERISPULSE_CHANNEL=dev` 即可使用预发布版本:
|
|
107
|
+
|
|
108
|
+
```bash
|
|
109
|
+
# 方式一:使用环境变量(推荐)
|
|
110
|
+
ERISPULSE_CHANNEL=dev ERISPULSE_DASHBOARD_TOKEN=your-token docker compose up -d
|
|
111
|
+
|
|
112
|
+
# 方式二:构建 dev 镜像
|
|
113
|
+
ERISPULSE_BUILD_TARGET=dev docker compose up -d --build
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
如需启动时自动更新到最新版本(无论 stable 还是 dev),显式设置 `ERISPULSE_UPDATE_ON_START=true`:
|
|
117
|
+
|
|
118
|
+
```bash
|
|
119
|
+
ERISPULSE_CHANNEL=dev ERISPULSE_UPDATE_ON_START=true docker compose up -d
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
也可以拉取预构建的 dev 镜像:
|
|
123
|
+
|
|
124
|
+
```bash
|
|
125
|
+
docker pull erispulse/erispulse:dev
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
</details>
|
|
129
|
+
|
|
130
|
+
<details>
|
|
131
|
+
<summary>Docker 环境变量</summary>
|
|
132
|
+
|
|
133
|
+
| 变量 | 默认值 | 说明 |
|
|
134
|
+
|------|--------|------|
|
|
135
|
+
| `ERISPULSE_CHANNEL` | `stable` | 版本通道:`stable`(稳定版)或 `dev`(预发布版) |
|
|
136
|
+
| `ERISPULSE_UPDATE_ON_START` | `false` | 容器启动时是否自动更新到最新版本(需显式启用) |
|
|
137
|
+
| `ERISPULSE_DASHBOARD_TOKEN` | 空 | Dashboard 登录令牌 |
|
|
138
|
+
| `ERISPULSE_PORT` | `8000` | Dashboard 端口映射 |
|
|
139
|
+
| `TZ` | `Asia/Shanghai` | 容器时区 |
|
|
140
|
+
|
|
141
|
+
> 启用 `ERISPULSE_UPDATE_ON_START=true` 可确保即使镜像较旧,容器也能在启动时自动获取最新版本。
|
|
142
|
+
|
|
143
|
+
</details>
|
|
144
|
+
|
|
145
|
+
### 1Panel 应用商店
|
|
146
|
+
|
|
147
|
+
通过 [1Panel](https://1panel.cn) 应用商店一键安装 ErisPulse,详见 [ErisPulse-1Panel](https://github.com/ErisPulse/ErisPulse-1Panel)。
|
|
148
|
+
|
|
149
|
+
```bash
|
|
150
|
+
bash <(curl -sL https://get-1panel.erisdev.com/install.sh)
|
|
151
|
+
```
|
|
152
|
+
|
|
102
153
|
### 使用 pip 安装
|
|
103
154
|
|
|
104
155
|
```bash
|
|
@@ -12,7 +12,7 @@ from argparse import ArgumentParser, RawDescriptionHelpFormatter
|
|
|
12
12
|
|
|
13
13
|
from rich.panel import Panel
|
|
14
14
|
|
|
15
|
-
from .console import console
|
|
15
|
+
from .console import console, print_banner
|
|
16
16
|
from .registry import CommandRegistry
|
|
17
17
|
from .base import Command
|
|
18
18
|
|
|
@@ -143,6 +143,8 @@ class CLI:
|
|
|
143
143
|
args, unknown = self.parser.parse_known_args()
|
|
144
144
|
args._unknown_args = unknown
|
|
145
145
|
|
|
146
|
+
print_banner()
|
|
147
|
+
|
|
146
148
|
# 处理版本选项
|
|
147
149
|
if args.version:
|
|
148
150
|
self._print_version()
|
|
@@ -162,6 +164,7 @@ class CLI:
|
|
|
162
164
|
# 执行命令
|
|
163
165
|
command = self.registry.get(args.command)
|
|
164
166
|
if command:
|
|
167
|
+
console.print(f"[title]{command.description}[/]")
|
|
165
168
|
command.execute(args)
|
|
166
169
|
else:
|
|
167
170
|
console.print(f"[error]未知命令: {args.command}[/]")
|
|
@@ -16,7 +16,7 @@ import traceback
|
|
|
16
16
|
import pkgutil
|
|
17
17
|
from argparse import ArgumentParser, RawDescriptionHelpFormatter
|
|
18
18
|
from rich.panel import Panel
|
|
19
|
-
from .console import console
|
|
19
|
+
from .console import console, print_banner
|
|
20
20
|
from .registry import CommandRegistry
|
|
21
21
|
from .base import Command
|
|
22
22
|
|
|
@@ -16,7 +16,6 @@ from ..console import console
|
|
|
16
16
|
from ..utils import PackageManager
|
|
17
17
|
from ..base import Command
|
|
18
18
|
|
|
19
|
-
|
|
20
19
|
class InitCommand(Command):
|
|
21
20
|
name = "init"
|
|
22
21
|
description = "初始化 ErisPulse 项目"
|
|
@@ -62,6 +61,10 @@ class InitCommand(Command):
|
|
|
62
61
|
:param adapter_list: 需要初始化的适配器列表
|
|
63
62
|
:return: 是否初始化成功
|
|
64
63
|
"""
|
|
64
|
+
if not project_name or not all(c.isalnum() or c in ('_', '-', '.') for c in project_name):
|
|
65
|
+
console.print("[error]项目名称只能包含字母、数字、下划线、连字符和点号[/]")
|
|
66
|
+
return False
|
|
67
|
+
|
|
65
68
|
try:
|
|
66
69
|
project_path = Path(project_name)
|
|
67
70
|
if project_path.exists():
|
|
@@ -81,32 +84,32 @@ class InitCommand(Command):
|
|
|
81
84
|
dir_path.mkdir(exist_ok=True)
|
|
82
85
|
console.print(f"[green]创建目录: {dir_name}[/green]")
|
|
83
86
|
|
|
84
|
-
# 创建配置文件
|
|
87
|
+
# 创建配置文件 (最小必须配置)
|
|
85
88
|
config_file = project_path / "config" / "config.toml"
|
|
86
89
|
if not config_file.exists():
|
|
87
90
|
with open(config_file, "w", encoding="utf-8") as f:
|
|
88
|
-
f.write("# ErisPulse 配置文件\n
|
|
89
|
-
f.write("
|
|
90
|
-
f.write("# 全局配置\n\n")
|
|
91
|
+
f.write("# ErisPulse 配置文件\n")
|
|
92
|
+
f.write("# 完整配置示例请参考 config.full.example\n\n")
|
|
91
93
|
f.write("[ErisPulse.server]\n")
|
|
92
94
|
f.write('host = "0.0.0.0"\n')
|
|
93
95
|
f.write("port = 8000\n\n")
|
|
94
96
|
f.write("[ErisPulse.logger]\n")
|
|
95
97
|
f.write('level = "INFO"\n')
|
|
96
|
-
f.write("log_files = [\"logs/app.log\"]\n")
|
|
97
|
-
f.write("memory_limit = 1000\n\n")
|
|
98
98
|
|
|
99
|
-
# 添加适配器配置
|
|
100
99
|
if adapter_list:
|
|
101
|
-
f.write("[ErisPulse.adapters]\n")
|
|
102
|
-
f.write("# 适配器配置\n\n")
|
|
103
|
-
f.write("[ErisPulse.adapters.status]\n")
|
|
100
|
+
f.write("\n[ErisPulse.adapters.status]\n")
|
|
104
101
|
for adapter in adapter_list:
|
|
105
|
-
f.write(f'{adapter} = false
|
|
106
|
-
f.write("\n")
|
|
102
|
+
f.write(f'{adapter} = false\n')
|
|
107
103
|
|
|
108
104
|
console.print("[green]创建配置文件: config/config.toml[/green]")
|
|
109
105
|
|
|
106
|
+
# 创建完整配置示例文件
|
|
107
|
+
example_file = project_path / "config" / "config.full.example"
|
|
108
|
+
if not example_file.exists():
|
|
109
|
+
with open(example_file, "w", encoding="utf-8") as f:
|
|
110
|
+
f.write(self._get_full_example_config(adapter_list))
|
|
111
|
+
console.print("[green]创建配置示例: config/config.full.example[/green]")
|
|
112
|
+
|
|
110
113
|
# 创建主程序文件
|
|
111
114
|
main_file = project_path / "main.py"
|
|
112
115
|
if not main_file.exists():
|
|
@@ -119,18 +122,7 @@ class InitCommand(Command):
|
|
|
119
122
|
f.write("import asyncio\n")
|
|
120
123
|
f.write("from ErisPulse import sdk\n\n")
|
|
121
124
|
f.write("async def main():\n")
|
|
122
|
-
f.write(
|
|
123
|
-
f.write(" # 初始化 SDK\n")
|
|
124
|
-
f.write(" await sdk.init()\n\n")
|
|
125
|
-
f.write(" # 启动适配器\n")
|
|
126
|
-
f.write(" await sdk.adapter.startup()\n\n")
|
|
127
|
-
f.write(' print("ErisPulse 已启动,按 Ctrl+C 退出")\n')
|
|
128
|
-
f.write(" try:\n")
|
|
129
|
-
f.write(" while True:\n")
|
|
130
|
-
f.write(" await asyncio.sleep(1)\n")
|
|
131
|
-
f.write(" except KeyboardInterrupt:\n")
|
|
132
|
-
f.write(" print(\"\\n正在关闭...\")\n")
|
|
133
|
-
f.write(" await sdk.adapter.shutdown()\n\n")
|
|
125
|
+
f.write(" await sdk.run(keep_running=True)\n\n")
|
|
134
126
|
f.write("if __name__ == \"__main__\":\n")
|
|
135
127
|
f.write(" asyncio.run(main())\n")
|
|
136
128
|
|
|
@@ -147,6 +139,112 @@ class InitCommand(Command):
|
|
|
147
139
|
console.print(f"[red]初始化项目失败: {e}[/]")
|
|
148
140
|
return False
|
|
149
141
|
|
|
142
|
+
@staticmethod
|
|
143
|
+
def _get_full_example_config(adapter_list=None):
|
|
144
|
+
"""
|
|
145
|
+
生成完整配置示例文件内容
|
|
146
|
+
|
|
147
|
+
:param adapter_list: list 可用适配器列表
|
|
148
|
+
:return: str 完整配置示例内容
|
|
149
|
+
|
|
150
|
+
{!--< internal-use >!--}
|
|
151
|
+
{!--< /internal-use >!--}
|
|
152
|
+
"""
|
|
153
|
+
lines = [
|
|
154
|
+
"# ErisPulse 完整配置示例",
|
|
155
|
+
"# 此文件展示所有可用配置项及其默认值",
|
|
156
|
+
"# 如需使用,将所需配置复制到 config.toml 并按需修改",
|
|
157
|
+
"",
|
|
158
|
+
"# ==================== 服务器 ====================",
|
|
159
|
+
"",
|
|
160
|
+
"[ErisPulse.server]",
|
|
161
|
+
'host = "0.0.0.0" # 监听地址',
|
|
162
|
+
"port = 8000 # 监听端口",
|
|
163
|
+
"ssl_certfile = null # SSL 证书路径",
|
|
164
|
+
"ssl_keyfile = null # SSL 密钥路径",
|
|
165
|
+
"",
|
|
166
|
+
"# ==================== 日志 ====================",
|
|
167
|
+
"",
|
|
168
|
+
"[ErisPulse.logger]",
|
|
169
|
+
'level = "INFO" # 日志级别: DEBUG/INFO/WARNING/ERROR',
|
|
170
|
+
"log_files = [] # 日志文件列表, 如 [\"logs/app.log\"]",
|
|
171
|
+
"memory_limit = 1000 # 内存日志条数上限",
|
|
172
|
+
"",
|
|
173
|
+
"# ==================== 存储 ====================",
|
|
174
|
+
"",
|
|
175
|
+
"[ErisPulse.storage]",
|
|
176
|
+
"use_global_db = false # 是否使用全局数据库",
|
|
177
|
+
"",
|
|
178
|
+
"# ==================== 事件系统 ====================",
|
|
179
|
+
"",
|
|
180
|
+
"[ErisPulse.event.message]",
|
|
181
|
+
"ignore_self = true # 忽略自身消息",
|
|
182
|
+
"",
|
|
183
|
+
"[ErisPulse.event.command]",
|
|
184
|
+
'prefix = "/" # 命令前缀',
|
|
185
|
+
"case_sensitive = true # 区分大小写",
|
|
186
|
+
"allow_space_prefix = false # 允许前缀前有空格",
|
|
187
|
+
"must_at_bot = false # 必须艾特Bot才触发",
|
|
188
|
+
"",
|
|
189
|
+
"# ==================== 框架 ====================",
|
|
190
|
+
"",
|
|
191
|
+
"[ErisPulse.framework]",
|
|
192
|
+
"enable_lazy_loading = true # 启用模块懒加载",
|
|
193
|
+
"",
|
|
194
|
+
"# ==================== 配置审计 ====================",
|
|
195
|
+
"",
|
|
196
|
+
"[ErisPulse.config.audit]",
|
|
197
|
+
"enabled = false # 是否启用配置审计",
|
|
198
|
+
"max_entries = 1000 # 审计日志最大条数",
|
|
199
|
+
"",
|
|
200
|
+
"# ==================== 指标监控 ====================",
|
|
201
|
+
"",
|
|
202
|
+
"[ErisPulse.metrics]",
|
|
203
|
+
"enabled = false # 是否启用指标采集",
|
|
204
|
+
"",
|
|
205
|
+
"# ==================== 路由增强 ====================",
|
|
206
|
+
"",
|
|
207
|
+
"[ErisPulse.router.cors]",
|
|
208
|
+
"enabled = false",
|
|
209
|
+
'allow_origins = ["*"]',
|
|
210
|
+
'allow_methods = ["*"]',
|
|
211
|
+
'allow_headers = ["*"]',
|
|
212
|
+
"allow_credentials = false",
|
|
213
|
+
"max_age = 600",
|
|
214
|
+
"",
|
|
215
|
+
"[ErisPulse.router.security]",
|
|
216
|
+
"enabled = false",
|
|
217
|
+
"",
|
|
218
|
+
"[ErisPulse.router.security.headers]",
|
|
219
|
+
'X-Content-Type-Options = "nosniff"',
|
|
220
|
+
'X-Frame-Options = "DENY"',
|
|
221
|
+
"",
|
|
222
|
+
"# ==================== 适配器状态 ====================",
|
|
223
|
+
"",
|
|
224
|
+
"[ErisPulse.adapters.status]",
|
|
225
|
+
]
|
|
226
|
+
|
|
227
|
+
if adapter_list:
|
|
228
|
+
for adapter in adapter_list:
|
|
229
|
+
lines.append(f"# {adapter} = false")
|
|
230
|
+
else:
|
|
231
|
+
lines.extend([
|
|
232
|
+
"# yunhu = false",
|
|
233
|
+
"# telegram = false",
|
|
234
|
+
"# onebot11 = false",
|
|
235
|
+
])
|
|
236
|
+
|
|
237
|
+
lines.extend([
|
|
238
|
+
"",
|
|
239
|
+
"# ==================== 模块状态 ====================",
|
|
240
|
+
"",
|
|
241
|
+
"[ErisPulse.modules.status]",
|
|
242
|
+
"# MyModule = true",
|
|
243
|
+
"",
|
|
244
|
+
])
|
|
245
|
+
|
|
246
|
+
return "\n".join(lines)
|
|
247
|
+
|
|
150
248
|
async def _fetch_available_adapters(self):
|
|
151
249
|
"""
|
|
152
250
|
从云端获取可用适配器列表
|