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.
Files changed (125) hide show
  1. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/PKG-INFO +53 -2
  2. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/README.md +52 -1
  3. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/pyproject.toml +1 -1
  4. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/CLI/cli.py +4 -1
  5. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/CLI/cli.pyi +1 -1
  6. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/CLI/commands/init.py +123 -25
  7. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/CLI/commands/install.py +59 -74
  8. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/CLI/commands/install.pyi +0 -7
  9. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/CLI/commands/run.py +70 -17
  10. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/CLI/commands/run.pyi +5 -5
  11. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/CLI/commands/self_update.py +1 -6
  12. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/CLI/commands/self_update.pyi +0 -1
  13. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/CLI/commands/uninstall.py +1 -9
  14. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/CLI/commands/uninstall.pyi +0 -1
  15. erispulse-2.4.5/src/ErisPulse/CLI/console.py +84 -0
  16. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/CLI/console.pyi +3 -0
  17. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/CLI/registry.py +1 -1
  18. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/CLI/utils/package_manager.py +333 -541
  19. erispulse-2.4.5/src/ErisPulse/CLI/utils/package_manager.pyi +105 -0
  20. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/Core/Bases/adapter.py +12 -3
  21. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/Core/Event/command.py +19 -5
  22. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/Core/Event/wrapper.py +245 -14
  23. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/Core/Event/wrapper.pyi +123 -3
  24. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/Core/__init__.py +12 -3
  25. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/Core/__init__.pyi +4 -3
  26. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/Core/adapter.py +31 -39
  27. erispulse-2.4.5/src/ErisPulse/Core/config.py +630 -0
  28. erispulse-2.4.5/src/ErisPulse/Core/config.pyi +175 -0
  29. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/Core/lifecycle.py +5 -3
  30. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/Core/lifecycle.pyi +9 -0
  31. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/Core/logger.py +44 -30
  32. erispulse-2.4.5/src/ErisPulse/Core/metrics.py +489 -0
  33. erispulse-2.4.5/src/ErisPulse/Core/metrics.pyi +302 -0
  34. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/Core/module.py +15 -1
  35. erispulse-2.4.5/src/ErisPulse/Core/router.py +1234 -0
  36. erispulse-2.4.5/src/ErisPulse/Core/router.pyi +451 -0
  37. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/Core/storage.py +15 -8
  38. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/Core/storage.pyi +4 -0
  39. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/__init__.py +1 -0
  40. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/__init__.pyi +1 -1
  41. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/finders/bases/finder.py +15 -11
  42. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/finders/bases/finder.pyi +1 -0
  43. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/loaders/adapter.py +15 -8
  44. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/loaders/bases/loader.py +3 -3
  45. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/loaders/module.py +199 -54
  46. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/loaders/module.pyi +1 -3
  47. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/loaders/strategy.py +1 -1
  48. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/runtime/exceptions.py +9 -9
  49. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/runtime/frame_config.py +34 -12
  50. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/runtime/frame_config.pyi +11 -0
  51. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/sdk.py +80 -40
  52. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/sdk.pyi +4 -0
  53. erispulse-2.4.3.dev1/src/ErisPulse/CLI/console.py +0 -48
  54. erispulse-2.4.3.dev1/src/ErisPulse/CLI/utils/package_manager.pyi +0 -250
  55. erispulse-2.4.3.dev1/src/ErisPulse/Core/config.py +0 -333
  56. erispulse-2.4.3.dev1/src/ErisPulse/Core/config.pyi +0 -80
  57. erispulse-2.4.3.dev1/src/ErisPulse/Core/router.py +0 -569
  58. erispulse-2.4.3.dev1/src/ErisPulse/Core/router.pyi +0 -174
  59. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/.gitignore +0 -0
  60. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/LICENSE +0 -0
  61. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/CLI/__init__.py +0 -0
  62. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/CLI/__init__.pyi +0 -0
  63. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/CLI/base.py +0 -0
  64. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/CLI/base.pyi +0 -0
  65. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/CLI/commands/__init__.py +0 -0
  66. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/CLI/commands/__init__.pyi +0 -0
  67. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/CLI/commands/init.pyi +0 -0
  68. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/CLI/commands/list.py +0 -0
  69. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/CLI/commands/list.pyi +0 -0
  70. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/CLI/commands/list_remote.py +0 -0
  71. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/CLI/commands/list_remote.pyi +0 -0
  72. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/CLI/commands/upgrade.py +0 -0
  73. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/CLI/commands/upgrade.pyi +0 -0
  74. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/CLI/registry.pyi +0 -0
  75. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/CLI/utils/__init__.py +0 -0
  76. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/CLI/utils/__init__.pyi +0 -0
  77. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/Core/Bases/__init__.py +0 -0
  78. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/Core/Bases/__init__.pyi +0 -0
  79. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/Core/Bases/adapter.pyi +0 -0
  80. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/Core/Bases/manager.py +0 -0
  81. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/Core/Bases/manager.pyi +0 -0
  82. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/Core/Bases/module.py +0 -0
  83. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/Core/Bases/module.pyi +0 -0
  84. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/Core/Bases/storage.py +0 -0
  85. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/Core/Bases/storage.pyi +0 -0
  86. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/Core/Event/__init__.py +0 -0
  87. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/Core/Event/__init__.pyi +0 -0
  88. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/Core/Event/base.py +0 -0
  89. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/Core/Event/base.pyi +0 -0
  90. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/Core/Event/command.pyi +0 -0
  91. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/Core/Event/message.py +0 -0
  92. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/Core/Event/message.pyi +0 -0
  93. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/Core/Event/message_builder.py +0 -0
  94. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/Core/Event/message_builder.pyi +0 -0
  95. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/Core/Event/meta.py +0 -0
  96. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/Core/Event/meta.pyi +0 -0
  97. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/Core/Event/notice.py +0 -0
  98. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/Core/Event/notice.pyi +0 -0
  99. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/Core/Event/request.py +0 -0
  100. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/Core/Event/request.pyi +0 -0
  101. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/Core/Event/session_type.py +0 -0
  102. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/Core/Event/session_type.pyi +0 -0
  103. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/Core/adapter.pyi +0 -0
  104. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/Core/logger.pyi +0 -0
  105. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/Core/module.pyi +0 -0
  106. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/__main__.py +0 -0
  107. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/__main__.pyi +0 -0
  108. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/finders/__init__.py +0 -0
  109. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/finders/__init__.pyi +0 -0
  110. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/finders/adapter.py +0 -0
  111. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/finders/adapter.pyi +0 -0
  112. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/finders/bases/__init__.py +0 -0
  113. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/finders/bases/__init__.pyi +0 -0
  114. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/finders/module.py +0 -0
  115. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/finders/module.pyi +0 -0
  116. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/loaders/__init__.py +0 -0
  117. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/loaders/__init__.pyi +0 -0
  118. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/loaders/adapter.pyi +0 -0
  119. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/loaders/bases/__init__.py +0 -0
  120. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/loaders/bases/__init__.pyi +0 -0
  121. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/loaders/bases/loader.pyi +0 -0
  122. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/loaders/strategy.pyi +0 -0
  123. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/runtime/__init__.py +0 -0
  124. {erispulse-2.4.3.dev1 → erispulse-2.4.5}/src/ErisPulse/runtime/__init__.pyi +0 -0
  125. {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.dev1
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/erispulse_logo_1024.png" width="280" alt="ErisPulse" />
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/erispulse_logo_1024.png" width="280" alt="ErisPulse" />
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
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "ErisPulse"
7
- version = "2.4.3-dev.1"
7
+ version = "2.4.5"
8
8
  description = "ErisPulse 是一个模块化、可扩展的异步 Python SDK 框架,主要用于构建高效、可维护的机器人应用程序。"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -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\n")
89
- f.write("[ErisPulse]\n")
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 # 默认禁用,需要时启用\n')
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(' """主程序入口"""\n')
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
  从云端获取可用适配器列表