ErisPulse 2.3.8.dev0__tar.gz → 2.3.9__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.3.8.dev0 → erispulse-2.3.9}/.gitignore +20 -1
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/PKG-INFO +22 -7
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/README.md +20 -5
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/pyproject.toml +2 -2
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/CLI/commands/init.py +3 -3
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/CLI/commands/init.pyi +1 -1
- erispulse-2.3.9/src/ErisPulse/CLI/commands/uninstall.py +137 -0
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/CLI/commands/uninstall.pyi +7 -0
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/Core/Bases/adapter.py +60 -2
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/Core/Bases/adapter.pyi +21 -1
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/Core/Bases/manager.py +28 -0
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/Core/Bases/manager.pyi +22 -0
- erispulse-2.3.9/src/ErisPulse/Core/Event/__init__.py +85 -0
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/Core/Event/__init__.pyi +1 -0
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/Core/Event/command.py +19 -19
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/Core/Event/command.pyi +3 -0
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/Core/Event/message.py +1 -1
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/Core/Event/message.pyi +2 -0
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/Core/Event/meta.py +1 -1
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/Core/Event/meta.pyi +2 -0
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/Core/Event/notice.py +1 -1
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/Core/Event/notice.pyi +2 -0
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/Core/Event/request.py +1 -1
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/Core/Event/request.pyi +2 -0
- erispulse-2.3.9/src/ErisPulse/Core/Event/session_type.py +418 -0
- erispulse-2.3.9/src/ErisPulse/Core/Event/session_type.pyi +196 -0
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/Core/Event/wrapper.py +6 -76
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/Core/Event/wrapper.pyi +2 -15
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/Core/adapter.py +34 -1
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/Core/adapter.pyi +25 -0
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/Core/config.py +1 -1
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/Core/config.pyi +2 -0
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/Core/lifecycle.py +1 -1
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/Core/lifecycle.pyi +2 -0
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/Core/logger.py +40 -1
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/Core/logger.pyi +35 -0
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/Core/module.py +26 -1
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/Core/module.pyi +25 -0
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/Core/router.py +55 -40
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/Core/router.pyi +14 -5
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/Core/storage.py +8 -18
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/Core/storage.pyi +8 -17
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/sdk.py +29 -17
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/sdk.pyi +22 -14
- erispulse-2.3.8.dev0/src/ErisPulse/CLI/commands/uninstall.py +0 -32
- erispulse-2.3.8.dev0/src/ErisPulse/Core/Event/__init__.py +0 -41
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/LICENSE +0 -0
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/CLI/__init__.py +0 -0
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/CLI/__init__.pyi +0 -0
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/CLI/base.py +0 -0
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/CLI/base.pyi +0 -0
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/CLI/cli.py +0 -0
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/CLI/cli.pyi +0 -0
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/CLI/commands/__init__.py +0 -0
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/CLI/commands/__init__.pyi +0 -0
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/CLI/commands/install.py +0 -0
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/CLI/commands/install.pyi +0 -0
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/CLI/commands/list.py +0 -0
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/CLI/commands/list.pyi +0 -0
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/CLI/commands/list_remote.py +0 -0
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/CLI/commands/list_remote.pyi +0 -0
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/CLI/commands/run.py +0 -0
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/CLI/commands/run.pyi +0 -0
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/CLI/commands/self_update.py +0 -0
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/CLI/commands/self_update.pyi +0 -0
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/CLI/commands/upgrade.py +0 -0
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/CLI/commands/upgrade.pyi +0 -0
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/CLI/console.py +0 -0
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/CLI/console.pyi +0 -0
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/CLI/registry.py +0 -0
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/CLI/registry.pyi +0 -0
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/CLI/utils/__init__.py +0 -0
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/CLI/utils/__init__.pyi +0 -0
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/CLI/utils/package_manager.py +0 -0
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/CLI/utils/package_manager.pyi +0 -0
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/Core/Bases/__init__.py +0 -0
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/Core/Bases/__init__.pyi +0 -0
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/Core/Bases/module.py +0 -0
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/Core/Bases/module.pyi +0 -0
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/Core/Event/base.py +0 -0
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/Core/Event/base.pyi +0 -0
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/Core/__init__.py +0 -0
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/Core/__init__.pyi +0 -0
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/__init__.py +0 -0
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/__init__.pyi +0 -0
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/__main__.py +0 -0
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/__main__.pyi +0 -0
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/finders/__init__.py +0 -0
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/finders/__init__.pyi +0 -0
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/finders/adapter.py +0 -0
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/finders/adapter.pyi +0 -0
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/finders/bases/__init__.py +0 -0
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/finders/bases/__init__.pyi +0 -0
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/finders/bases/finder.py +0 -0
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/finders/bases/finder.pyi +0 -0
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/finders/cli.py +0 -0
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/finders/cli.pyi +0 -0
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/finders/module.py +0 -0
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/finders/module.pyi +0 -0
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/loaders/__init__.py +0 -0
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/loaders/__init__.pyi +0 -0
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/loaders/adapter.py +0 -0
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/loaders/adapter.pyi +0 -0
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/loaders/bases/__init__.py +0 -0
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/loaders/bases/__init__.pyi +0 -0
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/loaders/bases/loader.py +0 -0
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/loaders/bases/loader.pyi +0 -0
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/loaders/module.py +0 -0
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/loaders/module.pyi +0 -0
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/loaders/strategy.py +0 -0
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/loaders/strategy.pyi +0 -0
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/runtime/__init__.py +0 -0
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/runtime/__init__.pyi +0 -0
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/runtime/cleanup.py +0 -0
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/runtime/cleanup.pyi +0 -0
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/runtime/exceptions.py +0 -0
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/runtime/exceptions.pyi +0 -0
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/runtime/frame_config.py +0 -0
- {erispulse-2.3.8.dev0 → erispulse-2.3.9}/src/ErisPulse/runtime/frame_config.pyi +0 -0
|
@@ -205,4 +205,23 @@ cython_debug/
|
|
|
205
205
|
bin
|
|
206
206
|
include
|
|
207
207
|
lib
|
|
208
|
-
pyvenv.cfg
|
|
208
|
+
pyvenv.cfg
|
|
209
|
+
|
|
210
|
+
# i18n 翻译文档(自动生成)
|
|
211
|
+
# 已提交到版本控制以支持 CI/CD 和状态追踪
|
|
212
|
+
# docs/zh-TW/
|
|
213
|
+
# docs/en/
|
|
214
|
+
# docs/ja/
|
|
215
|
+
# docs/ko/
|
|
216
|
+
# docs/fr/
|
|
217
|
+
# docs/de/
|
|
218
|
+
# docs/es/
|
|
219
|
+
# docs/it/
|
|
220
|
+
# docs/ru/
|
|
221
|
+
# docs/ar/
|
|
222
|
+
|
|
223
|
+
# 翻译缓存(已提交到版本控制)
|
|
224
|
+
# .translate_cache/
|
|
225
|
+
|
|
226
|
+
# 但保留源中文文档
|
|
227
|
+
!docs/zh-CN/
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ErisPulse
|
|
3
|
-
Version: 2.3.
|
|
3
|
+
Version: 2.3.9
|
|
4
4
|
Summary: ErisPulse 是一个模块化、可扩展的异步 Python SDK 框架,主要用于构建高效、可维护的机器人应用程序。
|
|
5
|
-
Author-email:
|
|
5
|
+
Author-email: ErisDev <erisdev@88.com>
|
|
6
6
|
Maintainer-email: "艾莉丝·格雷拉特(WSu2059)" <wsu2059@qq.com>
|
|
7
7
|
License: MIT License
|
|
8
8
|
|
|
@@ -58,6 +58,12 @@ Requires-Dist: pytest-xdist>=3.0.0; extra == 'test'
|
|
|
58
58
|
Requires-Dist: pytest>=7.0.0; extra == 'test'
|
|
59
59
|
Description-Content-Type: text/markdown
|
|
60
60
|
|
|
61
|
+
<div align="center">
|
|
62
|
+
|
|
63
|
+
[English](README.en.md) | [简体中文](README.md) | [繁體中文](README.zh-TW.md)
|
|
64
|
+
|
|
65
|
+
</div>
|
|
66
|
+
|
|
61
67
|
<table>
|
|
62
68
|
<tr>
|
|
63
69
|
<td width="35%" valign="middle" align="center">
|
|
@@ -105,6 +111,9 @@ pip install -i https://pypi.tuna.tsinghua.edu.cn/simple ErisPulse
|
|
|
105
111
|
# 使用 `uv` 安装
|
|
106
112
|
uv install ErisPulse
|
|
107
113
|
```
|
|
114
|
+
|
|
115
|
+

|
|
116
|
+
|
|
108
117
|
> 如果您的 Python 版本低于 3.10,可以使用一键安装脚本自动配置环境。详见 [安装脚本说明](scripts/install/)。
|
|
109
118
|
|
|
110
119
|
### 初始化项目
|
|
@@ -175,8 +184,8 @@ epsdk run main.py --reload
|
|
|
175
184
|
</table>
|
|
176
185
|
|
|
177
186
|
更多详细说明请参阅:
|
|
178
|
-
- [快速开始指南](docs/quick-start.md)
|
|
179
|
-
- [入门指南](docs/getting-started/)
|
|
187
|
+
- [快速开始指南](docs/zh-CN/quick-start.md)
|
|
188
|
+
- [入门指南](docs/zh-CN/getting-started/)
|
|
180
189
|
|
|
181
190
|
## 应用场景
|
|
182
191
|
|
|
@@ -197,10 +206,16 @@ epsdk run main.py --reload
|
|
|
197
206
|
- [邮件](https://github.com/ErisPulse/ErisPulse-EmailAdapter) - 邮件收发处理
|
|
198
207
|
- [沙箱](https://github.com/ErisPulse/ErisPulse-SandboxAdapter) - 网页调试界面,无需接入实际平台
|
|
199
208
|
|
|
200
|
-
查看 [适配器详情介绍](docs/platform-guide/README.md)
|
|
209
|
+
查看 [适配器详情介绍](docs/zh-CN/platform-guide/README.md)
|
|
201
210
|
|
|
202
211
|
## 文档资源
|
|
203
212
|
|
|
213
|
+
| 简体中文 | English | 繁體中文 |
|
|
214
|
+
|----------------|----------------|----------------|
|
|
215
|
+
| [文档入口](docs/zh-CN/README.md) | [Documentation](docs/en/README.md) | [文檔入口](docs/zh-TW/README.md) |
|
|
216
|
+
|
|
217
|
+
## 外部资源
|
|
218
|
+
|
|
204
219
|
| 平台 | 主站点 | 备用站点 |
|
|
205
220
|
|------|--------|---------|
|
|
206
221
|
| 文档 | [erisdev.com](https://www.erisdev.com/#docs) | [Cloudflare](https://erispulse.pages.dev/#docs) • [GitHub](https://erispulse.github.io/#docs) • [Netlify](https://erispulse.netlify.app/#docs) |
|
|
@@ -208,7 +223,7 @@ epsdk run main.py --reload
|
|
|
208
223
|
|
|
209
224
|
## 贡献指南
|
|
210
225
|
|
|
211
|
-
|
|
226
|
+
ErisPulse 项目的健全性还需要您的一份力!我们欢迎各种形式的贡献,包括但不限于:
|
|
212
227
|
|
|
213
228
|
1. **报告问题**
|
|
214
229
|
在 [GitHub Issues](https://github.com/ErisPulse/ErisPulse/issues) 提交 bug 报告
|
|
@@ -217,7 +232,7 @@ epsdk run main.py --reload
|
|
|
217
232
|
通过 [社区讨论](https://github.com/ErisPulse/ErisPulse/discussions) 提出新想法
|
|
218
233
|
|
|
219
234
|
3. **代码贡献**
|
|
220
|
-
提交 Pull Request 前请阅读我们的 [代码风格](docs/styleguide/) 以及 [贡献指南](CONTRIBUTING.md)
|
|
235
|
+
提交 Pull Request 前请阅读我们的 [代码风格](docs/zh-CN/styleguide/) 以及 [贡献指南](CONTRIBUTING.md)
|
|
221
236
|
|
|
222
237
|
4. **文档改进**
|
|
223
238
|
帮助完善文档和示例代码
|
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
<div align="center">
|
|
2
|
+
|
|
3
|
+
[English](README.en.md) | [简体中文](README.md) | [繁體中文](README.zh-TW.md)
|
|
4
|
+
|
|
5
|
+
</div>
|
|
6
|
+
|
|
1
7
|
<table>
|
|
2
8
|
<tr>
|
|
3
9
|
<td width="35%" valign="middle" align="center">
|
|
@@ -45,6 +51,9 @@ pip install -i https://pypi.tuna.tsinghua.edu.cn/simple ErisPulse
|
|
|
45
51
|
# 使用 `uv` 安装
|
|
46
52
|
uv install ErisPulse
|
|
47
53
|
```
|
|
54
|
+
|
|
55
|
+

|
|
56
|
+
|
|
48
57
|
> 如果您的 Python 版本低于 3.10,可以使用一键安装脚本自动配置环境。详见 [安装脚本说明](scripts/install/)。
|
|
49
58
|
|
|
50
59
|
### 初始化项目
|
|
@@ -115,8 +124,8 @@ epsdk run main.py --reload
|
|
|
115
124
|
</table>
|
|
116
125
|
|
|
117
126
|
更多详细说明请参阅:
|
|
118
|
-
- [快速开始指南](docs/quick-start.md)
|
|
119
|
-
- [入门指南](docs/getting-started/)
|
|
127
|
+
- [快速开始指南](docs/zh-CN/quick-start.md)
|
|
128
|
+
- [入门指南](docs/zh-CN/getting-started/)
|
|
120
129
|
|
|
121
130
|
## 应用场景
|
|
122
131
|
|
|
@@ -137,10 +146,16 @@ epsdk run main.py --reload
|
|
|
137
146
|
- [邮件](https://github.com/ErisPulse/ErisPulse-EmailAdapter) - 邮件收发处理
|
|
138
147
|
- [沙箱](https://github.com/ErisPulse/ErisPulse-SandboxAdapter) - 网页调试界面,无需接入实际平台
|
|
139
148
|
|
|
140
|
-
查看 [适配器详情介绍](docs/platform-guide/README.md)
|
|
149
|
+
查看 [适配器详情介绍](docs/zh-CN/platform-guide/README.md)
|
|
141
150
|
|
|
142
151
|
## 文档资源
|
|
143
152
|
|
|
153
|
+
| 简体中文 | English | 繁體中文 |
|
|
154
|
+
|----------------|----------------|----------------|
|
|
155
|
+
| [文档入口](docs/zh-CN/README.md) | [Documentation](docs/en/README.md) | [文檔入口](docs/zh-TW/README.md) |
|
|
156
|
+
|
|
157
|
+
## 外部资源
|
|
158
|
+
|
|
144
159
|
| 平台 | 主站点 | 备用站点 |
|
|
145
160
|
|------|--------|---------|
|
|
146
161
|
| 文档 | [erisdev.com](https://www.erisdev.com/#docs) | [Cloudflare](https://erispulse.pages.dev/#docs) • [GitHub](https://erispulse.github.io/#docs) • [Netlify](https://erispulse.netlify.app/#docs) |
|
|
@@ -148,7 +163,7 @@ epsdk run main.py --reload
|
|
|
148
163
|
|
|
149
164
|
## 贡献指南
|
|
150
165
|
|
|
151
|
-
|
|
166
|
+
ErisPulse 项目的健全性还需要您的一份力!我们欢迎各种形式的贡献,包括但不限于:
|
|
152
167
|
|
|
153
168
|
1. **报告问题**
|
|
154
169
|
在 [GitHub Issues](https://github.com/ErisPulse/ErisPulse/issues) 提交 bug 报告
|
|
@@ -157,7 +172,7 @@ epsdk run main.py --reload
|
|
|
157
172
|
通过 [社区讨论](https://github.com/ErisPulse/ErisPulse/discussions) 提出新想法
|
|
158
173
|
|
|
159
174
|
3. **代码贡献**
|
|
160
|
-
提交 Pull Request 前请阅读我们的 [代码风格](docs/styleguide/) 以及 [贡献指南](CONTRIBUTING.md)
|
|
175
|
+
提交 Pull Request 前请阅读我们的 [代码风格](docs/zh-CN/styleguide/) 以及 [贡献指南](CONTRIBUTING.md)
|
|
161
176
|
|
|
162
177
|
4. **文档改进**
|
|
163
178
|
帮助完善文档和示例代码
|
|
@@ -4,14 +4,14 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "ErisPulse"
|
|
7
|
-
version = "2.3.
|
|
7
|
+
version = "2.3.9"
|
|
8
8
|
description = "ErisPulse 是一个模块化、可扩展的异步 Python SDK 框架,主要用于构建高效、可维护的机器人应用程序。"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.10"
|
|
11
11
|
license = { file = "LICENSE" }
|
|
12
12
|
|
|
13
13
|
authors = [
|
|
14
|
-
{ name = "
|
|
14
|
+
{ name = "ErisDev", email = "erisdev@88.com" }
|
|
15
15
|
]
|
|
16
16
|
|
|
17
17
|
maintainers = [
|
|
@@ -177,7 +177,7 @@ class InitCommand(Command):
|
|
|
177
177
|
"email": "邮件适配器"
|
|
178
178
|
}
|
|
179
179
|
|
|
180
|
-
def _configure_adapters_interactive_sync(self, project_path:
|
|
180
|
+
def _configure_adapters_interactive_sync(self, project_path: Path = None):
|
|
181
181
|
"""
|
|
182
182
|
交互式配置适配器的同步版本
|
|
183
183
|
|
|
@@ -377,7 +377,7 @@ class InitCommand(Command):
|
|
|
377
377
|
|
|
378
378
|
# 询问是否要配置适配器
|
|
379
379
|
if Confirm.ask("\n[cyan]是否要配置适配器?[/cyan]", default=True):
|
|
380
|
-
self._configure_adapters_interactive_sync(
|
|
380
|
+
self._configure_adapters_interactive_sync(project_path)
|
|
381
381
|
|
|
382
382
|
# 保存配置
|
|
383
383
|
config.force_save()
|
|
@@ -392,4 +392,4 @@ class InitCommand(Command):
|
|
|
392
392
|
|
|
393
393
|
except Exception as e:
|
|
394
394
|
console.print(f"[red]交互式初始化失败: {e}[/]")
|
|
395
|
-
return False
|
|
395
|
+
return False
|
|
@@ -44,7 +44,7 @@ class InitCommand(Command):
|
|
|
44
44
|
:return: 适配器名称到描述的映射
|
|
45
45
|
"""
|
|
46
46
|
...
|
|
47
|
-
def _configure_adapters_interactive_sync(self: object, project_path:
|
|
47
|
+
def _configure_adapters_interactive_sync(self: object, project_path: Path = ...) -> ...:
|
|
48
48
|
"""
|
|
49
49
|
交互式配置适配器的同步版本
|
|
50
50
|
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Uninstall 命令实现
|
|
3
|
+
|
|
4
|
+
支持卸载模块、适配器、CLI 扩展
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import sys
|
|
8
|
+
from argparse import ArgumentParser
|
|
9
|
+
|
|
10
|
+
from rich.panel import Panel
|
|
11
|
+
from rich.prompt import Prompt
|
|
12
|
+
from rich.table import Table
|
|
13
|
+
from rich.box import SIMPLE
|
|
14
|
+
|
|
15
|
+
from ..utils import PackageManager
|
|
16
|
+
from ..console import console
|
|
17
|
+
from ..base import Command
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class UninstallCommand(Command):
|
|
21
|
+
|
|
22
|
+
name = "uninstall"
|
|
23
|
+
description = "卸载模块/适配器包(不指定包名时进入交互式卸载)"
|
|
24
|
+
|
|
25
|
+
def __init__(self):
|
|
26
|
+
self.package_manager = PackageManager()
|
|
27
|
+
|
|
28
|
+
def add_arguments(self, parser: ArgumentParser):
|
|
29
|
+
parser.add_argument(
|
|
30
|
+
'package',
|
|
31
|
+
nargs='*',
|
|
32
|
+
help='要卸载的包名(可指定多个)'
|
|
33
|
+
)
|
|
34
|
+
|
|
35
|
+
def execute(self, args):
|
|
36
|
+
if args.package:
|
|
37
|
+
# 直接卸载指定包
|
|
38
|
+
success = self.package_manager.uninstall_package(args.package)
|
|
39
|
+
if not success:
|
|
40
|
+
sys.exit(1)
|
|
41
|
+
else:
|
|
42
|
+
# 交互式卸载
|
|
43
|
+
self._interactive_uninstall()
|
|
44
|
+
|
|
45
|
+
def _interactive_uninstall(self):
|
|
46
|
+
console.print(Panel(
|
|
47
|
+
"[bold cyan]ErisPulse 卸载向导[/]\n"
|
|
48
|
+
"选择要卸载的包",
|
|
49
|
+
title="卸载向导",
|
|
50
|
+
border_style="cyan"
|
|
51
|
+
))
|
|
52
|
+
|
|
53
|
+
# 获取已安装的包
|
|
54
|
+
installed = self.package_manager.get_installed_packages()
|
|
55
|
+
|
|
56
|
+
# 收集所有已安装的包
|
|
57
|
+
all_packages = []
|
|
58
|
+
|
|
59
|
+
# 添加适配器
|
|
60
|
+
for name, info in installed.get("adapters", {}).items():
|
|
61
|
+
all_packages.append({
|
|
62
|
+
"type": "适配器",
|
|
63
|
+
"name": name,
|
|
64
|
+
"package": info["package"],
|
|
65
|
+
"version": info["version"]
|
|
66
|
+
})
|
|
67
|
+
|
|
68
|
+
# 添加模块
|
|
69
|
+
for name, info in installed.get("modules", {}).items():
|
|
70
|
+
all_packages.append({
|
|
71
|
+
"type": "模块",
|
|
72
|
+
"name": name,
|
|
73
|
+
"package": info["package"],
|
|
74
|
+
"version": info["version"]
|
|
75
|
+
})
|
|
76
|
+
|
|
77
|
+
# 添加 CLI 扩展
|
|
78
|
+
for name, info in installed.get("cli_extensions", {}).items():
|
|
79
|
+
all_packages.append({
|
|
80
|
+
"type": "CLI",
|
|
81
|
+
"name": name,
|
|
82
|
+
"package": info["package"],
|
|
83
|
+
"version": info["version"]
|
|
84
|
+
})
|
|
85
|
+
|
|
86
|
+
if not all_packages:
|
|
87
|
+
console.print("[yellow]没有已安装的包[/]")
|
|
88
|
+
return
|
|
89
|
+
|
|
90
|
+
# 显示包列表
|
|
91
|
+
table = Table(box=SIMPLE)
|
|
92
|
+
table.add_column("序号", style="cyan")
|
|
93
|
+
table.add_column("类型", style="bold")
|
|
94
|
+
table.add_column("名称")
|
|
95
|
+
table.add_column("包名")
|
|
96
|
+
table.add_column("版本")
|
|
97
|
+
|
|
98
|
+
for i, pkg in enumerate(all_packages, 1):
|
|
99
|
+
table.add_row(
|
|
100
|
+
str(i),
|
|
101
|
+
pkg["type"],
|
|
102
|
+
pkg["name"],
|
|
103
|
+
pkg["package"],
|
|
104
|
+
pkg["version"]
|
|
105
|
+
)
|
|
106
|
+
|
|
107
|
+
console.print(table)
|
|
108
|
+
|
|
109
|
+
# 选择要卸载的包
|
|
110
|
+
selected = Prompt.ask(
|
|
111
|
+
"\n[cyan]请输入要卸载的包序号(多个用逗号分隔,如: 1,3)或按 q 退出:[/cyan]"
|
|
112
|
+
)
|
|
113
|
+
|
|
114
|
+
if selected.lower() == 'q':
|
|
115
|
+
console.print("[info]退出卸载向导[/]")
|
|
116
|
+
return
|
|
117
|
+
|
|
118
|
+
try:
|
|
119
|
+
indices = [int(idx.strip()) for idx in selected.split(",")]
|
|
120
|
+
selected_packages = []
|
|
121
|
+
|
|
122
|
+
for idx in indices:
|
|
123
|
+
if 1 <= idx <= len(all_packages):
|
|
124
|
+
pkg_info = all_packages[idx - 1]
|
|
125
|
+
selected_packages.append(pkg_info["package"])
|
|
126
|
+
console.print(f"[green]已选择: {pkg_info['name']} ({pkg_info['package']})[/]")
|
|
127
|
+
else:
|
|
128
|
+
console.print(f"[red]无效的序号: {idx}[/]")
|
|
129
|
+
|
|
130
|
+
if selected_packages:
|
|
131
|
+
# 卸载选中的包
|
|
132
|
+
success = self.package_manager.uninstall_package(selected_packages)
|
|
133
|
+
if not success:
|
|
134
|
+
sys.exit(1)
|
|
135
|
+
|
|
136
|
+
except ValueError:
|
|
137
|
+
console.print("[red]输入格式错误,请输入数字序号[/]")
|
|
@@ -12,7 +12,12 @@ Uninstall 命令实现
|
|
|
12
12
|
|
|
13
13
|
import sys
|
|
14
14
|
from argparse import ArgumentParser
|
|
15
|
+
from rich.panel import Panel
|
|
16
|
+
from rich.prompt import Prompt
|
|
17
|
+
from rich.table import Table
|
|
18
|
+
from rich.box import SIMPLE
|
|
15
19
|
from ..utils import PackageManager
|
|
20
|
+
from ..console import console
|
|
16
21
|
from ..base import Command
|
|
17
22
|
|
|
18
23
|
class UninstallCommand(Command):
|
|
@@ -22,3 +27,5 @@ class UninstallCommand(Command):
|
|
|
22
27
|
...
|
|
23
28
|
def execute(self: object, args: ...) -> ...:
|
|
24
29
|
...
|
|
30
|
+
def _interactive_uninstall(self: object) -> ...:
|
|
31
|
+
...
|
|
@@ -42,6 +42,41 @@ class SendDSL:
|
|
|
42
42
|
self._target_to = target_id
|
|
43
43
|
self._account_id = account_id
|
|
44
44
|
|
|
45
|
+
def __getattr__(self, name: str):
|
|
46
|
+
"""
|
|
47
|
+
动态属性访问处理,实现大小写不敏感调用
|
|
48
|
+
|
|
49
|
+
1. 如果找到匹配的方法(忽略大小写),返回该方法
|
|
50
|
+
2. 如果没找到,打印警告并抛出 AttributeError
|
|
51
|
+
|
|
52
|
+
:param name: 属性名
|
|
53
|
+
:return: 匹配的方法或属性
|
|
54
|
+
:raises AttributeError: 当属性不存在时抛出
|
|
55
|
+
"""
|
|
56
|
+
# 检查所有实际存在的方法
|
|
57
|
+
for attr_name in dir(self.__class__):
|
|
58
|
+
# 跳过特殊方法
|
|
59
|
+
if attr_name.startswith('_'):
|
|
60
|
+
continue
|
|
61
|
+
|
|
62
|
+
# 大小写不敏感匹配
|
|
63
|
+
if attr_name.lower() == name.lower():
|
|
64
|
+
# 返回实际的方法绑定到当前实例
|
|
65
|
+
attr = getattr(self.__class__, attr_name)
|
|
66
|
+
if callable(attr):
|
|
67
|
+
return attr.__get__(self, self.__class__)
|
|
68
|
+
return attr
|
|
69
|
+
|
|
70
|
+
# 没有找到匹配的方法,打印警告
|
|
71
|
+
from .. import logger
|
|
72
|
+
logger.warning(
|
|
73
|
+
f"平台 {self._adapter.__class__.__name__} "
|
|
74
|
+
f"未实现 {name} 发送方法"
|
|
75
|
+
)
|
|
76
|
+
|
|
77
|
+
# 抛出 AttributeError,这样 hasattr() 能正常工作
|
|
78
|
+
raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")
|
|
79
|
+
|
|
45
80
|
def At(self, **kwargs):
|
|
46
81
|
from .. import logger
|
|
47
82
|
logger.warning(
|
|
@@ -82,18 +117,41 @@ class SendDSL:
|
|
|
82
117
|
"""
|
|
83
118
|
设置消息目标
|
|
84
119
|
|
|
120
|
+
支持自动类型转换:
|
|
121
|
+
- 当 target_type 为 "private" 时,自动转换为 "user"
|
|
122
|
+
- 当只提供 target_id(字符串或数字)时,默认推断为 "user"
|
|
123
|
+
|
|
85
124
|
:param target_type: 目标类型(可选)
|
|
86
125
|
:param target_id: 目标ID(可选)
|
|
87
126
|
:return: SendDSL实例
|
|
88
127
|
|
|
89
128
|
:example:
|
|
129
|
+
>>> # 标准用法
|
|
90
130
|
>>> adapter.Send.To("user", "123").Text("Hello")
|
|
91
|
-
>>>
|
|
131
|
+
>>> # 自动转换 private → user
|
|
132
|
+
>>> adapter.Send.To("private", "123").Text("Hello")
|
|
133
|
+
>>> # 简化形式(默认推断为 user)
|
|
134
|
+
>>> adapter.Send.To("123").Text("Hello")
|
|
92
135
|
"""
|
|
136
|
+
from ..Event.session_type import is_standard_type
|
|
137
|
+
|
|
138
|
+
# 处理简化形式:只提供一个参数作为 target_id
|
|
93
139
|
if target_id is None and target_type is not None:
|
|
94
140
|
target_id = target_type
|
|
95
141
|
target_type = None
|
|
96
|
-
|
|
142
|
+
|
|
143
|
+
# 如果没有明确指定 target_type,尝试推断
|
|
144
|
+
if target_type is None:
|
|
145
|
+
# 将 target_id 作为字符串处理
|
|
146
|
+
if target_id is not None:
|
|
147
|
+
# 默认推断为 user(对应 private)
|
|
148
|
+
# 这里我们假设如果只提供 ID,通常是发送给用户
|
|
149
|
+
target_type = "user"
|
|
150
|
+
|
|
151
|
+
# 自动转换 private → user
|
|
152
|
+
if target_type == "private":
|
|
153
|
+
target_type = "user"
|
|
154
|
+
|
|
97
155
|
return self.__class__(self._adapter, target_type, target_id, self._account_id)
|
|
98
156
|
|
|
99
157
|
def Using(self, account_id: Union[str, int]) -> 'SendDSL':
|
|
@@ -39,6 +39,18 @@ class SendDSL:
|
|
|
39
39
|
:param _account_id: 发送账号(可选)
|
|
40
40
|
"""
|
|
41
41
|
...
|
|
42
|
+
def __getattr__(self: object, name: str) -> ...:
|
|
43
|
+
"""
|
|
44
|
+
动态属性访问处理,实现大小写不敏感调用
|
|
45
|
+
|
|
46
|
+
1. 如果找到匹配的方法(忽略大小写),返回该方法
|
|
47
|
+
2. 如果没找到,打印警告并抛出 AttributeError
|
|
48
|
+
|
|
49
|
+
:param name: 属性名
|
|
50
|
+
:return: 匹配的方法或属性
|
|
51
|
+
:raises AttributeError: 当属性不存在时抛出
|
|
52
|
+
"""
|
|
53
|
+
...
|
|
42
54
|
def At(self: object, **kwargs: ...) -> ...:
|
|
43
55
|
...
|
|
44
56
|
def Reply(self: object, **kwargs: ...) -> ...:
|
|
@@ -53,13 +65,21 @@ class SendDSL:
|
|
|
53
65
|
"""
|
|
54
66
|
设置消息目标
|
|
55
67
|
|
|
68
|
+
支持自动类型转换:
|
|
69
|
+
- 当 target_type 为 "private" 时,自动转换为 "user"
|
|
70
|
+
- 当只提供 target_id(字符串或数字)时,默认推断为 "user"
|
|
71
|
+
|
|
56
72
|
:param target_type: 目标类型(可选)
|
|
57
73
|
:param target_id: 目标ID(可选)
|
|
58
74
|
:return: SendDSL实例
|
|
59
75
|
|
|
60
76
|
:example:
|
|
77
|
+
>>> # 标准用法
|
|
61
78
|
>>> adapter.Send.To("user", "123").Text("Hello")
|
|
62
|
-
>>>
|
|
79
|
+
>>> # 自动转换 private → user
|
|
80
|
+
>>> adapter.Send.To("private", "123").Text("Hello")
|
|
81
|
+
>>> # 简化形式(默认推断为 user)
|
|
82
|
+
>>> adapter.Send.To("123").Text("Hello")
|
|
63
83
|
"""
|
|
64
84
|
...
|
|
65
85
|
def Using(self: object, account_id: Union[(str, int)]) -> SendDSL:
|
|
@@ -26,6 +26,7 @@ class ManagerBase(ABC):
|
|
|
26
26
|
- exists(): 检查是否存在
|
|
27
27
|
- enable()/disable(): 启用/禁用
|
|
28
28
|
- is_enabled(): 检查是否启用
|
|
29
|
+
- is_running(): 检查是否运行
|
|
29
30
|
- list_*(): 列出相关项
|
|
30
31
|
{!--< /tips >!--}
|
|
31
32
|
"""
|
|
@@ -129,6 +130,33 @@ class ManagerBase(ABC):
|
|
|
129
130
|
:return: {名称: 是否启用} 字典
|
|
130
131
|
"""
|
|
131
132
|
...
|
|
133
|
+
|
|
134
|
+
# ==================== 运行状态检查 ====================
|
|
135
|
+
|
|
136
|
+
@abstractmethod
|
|
137
|
+
def is_running(self, name: str) -> bool:
|
|
138
|
+
"""
|
|
139
|
+
检查项是否正在运行
|
|
140
|
+
|
|
141
|
+
对于适配器:检查是否已启动
|
|
142
|
+
对于模块:检查是否已加载
|
|
143
|
+
|
|
144
|
+
:param name: 名称
|
|
145
|
+
:return: 是否正在运行
|
|
146
|
+
"""
|
|
147
|
+
...
|
|
148
|
+
|
|
149
|
+
@abstractmethod
|
|
150
|
+
def list_running(self) -> List[str]:
|
|
151
|
+
"""
|
|
152
|
+
列出所有正在运行的项
|
|
153
|
+
|
|
154
|
+
对于适配器:列出所有已启动的适配器
|
|
155
|
+
对于模块:列出所有已加载的模块
|
|
156
|
+
|
|
157
|
+
:return: 名称列表
|
|
158
|
+
"""
|
|
159
|
+
...
|
|
132
160
|
|
|
133
161
|
|
|
134
162
|
__all__ = [
|
|
@@ -31,6 +31,7 @@ class ManagerBase(ABC):
|
|
|
31
31
|
- exists(): 检查是否存在
|
|
32
32
|
- enable()/disable(): 启用/禁用
|
|
33
33
|
- is_enabled(): 检查是否启用
|
|
34
|
+
- is_running(): 检查是否运行
|
|
34
35
|
- list_*(): 列出相关项
|
|
35
36
|
{!--< /tips >!--}
|
|
36
37
|
"""
|
|
@@ -106,3 +107,24 @@ class ManagerBase(ABC):
|
|
|
106
107
|
:return: {名称: 是否启用} 字典
|
|
107
108
|
"""
|
|
108
109
|
...
|
|
110
|
+
def is_running(self: object, name: str) -> bool:
|
|
111
|
+
"""
|
|
112
|
+
检查项是否正在运行
|
|
113
|
+
|
|
114
|
+
对于适配器:检查是否已启动
|
|
115
|
+
对于模块:检查是否已加载
|
|
116
|
+
|
|
117
|
+
:param name: 名称
|
|
118
|
+
:return: 是否正在运行
|
|
119
|
+
"""
|
|
120
|
+
...
|
|
121
|
+
def list_running(self: object) -> List[str]:
|
|
122
|
+
"""
|
|
123
|
+
列出所有正在运行的项
|
|
124
|
+
|
|
125
|
+
对于适配器:列出所有已启动的适配器
|
|
126
|
+
对于模块:列出所有已加载的模块
|
|
127
|
+
|
|
128
|
+
:return: 名称列表
|
|
129
|
+
"""
|
|
130
|
+
...
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"""
|
|
2
|
+
ErisPulse 事件处理模块
|
|
3
|
+
|
|
4
|
+
提供统一的事件处理接口,支持命令、消息、通知、请求和元事件处理
|
|
5
|
+
|
|
6
|
+
{!--< tips >!--}
|
|
7
|
+
1. 所有事件处理都基于OneBot12标准事件格式
|
|
8
|
+
2. 通过装饰器方式注册事件处理器
|
|
9
|
+
3. 支持优先级和条件过滤
|
|
10
|
+
{!--< /tips >!--}
|
|
11
|
+
"""
|
|
12
|
+
|
|
13
|
+
from .command import command
|
|
14
|
+
from .message import message
|
|
15
|
+
from .notice import notice
|
|
16
|
+
from .request import request
|
|
17
|
+
from .meta import meta
|
|
18
|
+
from .wrapper import Event
|
|
19
|
+
from .session_type import (
|
|
20
|
+
# 标准类型常量
|
|
21
|
+
RECEIVE_TYPES,
|
|
22
|
+
SEND_TYPES,
|
|
23
|
+
|
|
24
|
+
# 自定义类型注册
|
|
25
|
+
register_custom_type,
|
|
26
|
+
unregister_custom_type,
|
|
27
|
+
|
|
28
|
+
# 类型获取方法
|
|
29
|
+
get_id_field,
|
|
30
|
+
get_receive_type,
|
|
31
|
+
convert_to_send_type,
|
|
32
|
+
convert_to_receive_type,
|
|
33
|
+
|
|
34
|
+
# 自动推断方法
|
|
35
|
+
infer_receive_type,
|
|
36
|
+
get_target_id,
|
|
37
|
+
get_send_type_and_target_id,
|
|
38
|
+
|
|
39
|
+
# 工具方法
|
|
40
|
+
is_standard_type,
|
|
41
|
+
is_valid_send_type,
|
|
42
|
+
get_standard_types,
|
|
43
|
+
get_send_types,
|
|
44
|
+
clear_custom_types,
|
|
45
|
+
)
|
|
46
|
+
|
|
47
|
+
def _clear_all_handlers():
|
|
48
|
+
"""
|
|
49
|
+
{!--< internal-use >!--}
|
|
50
|
+
清除所有已注册的事件处理器和命令
|
|
51
|
+
"""
|
|
52
|
+
# 清除命令处理器
|
|
53
|
+
command._clear_commands()
|
|
54
|
+
|
|
55
|
+
# 清除各类事件处理器
|
|
56
|
+
message._clear_message_handlers()
|
|
57
|
+
notice._clear_notice_handlers()
|
|
58
|
+
request._clear_request_handlers()
|
|
59
|
+
meta._clear_meta_handlers()
|
|
60
|
+
|
|
61
|
+
__all__ = [
|
|
62
|
+
"command",
|
|
63
|
+
"message",
|
|
64
|
+
"notice",
|
|
65
|
+
"request",
|
|
66
|
+
"meta",
|
|
67
|
+
"Event",
|
|
68
|
+
# 会话类型管理
|
|
69
|
+
"RECEIVE_TYPES",
|
|
70
|
+
"SEND_TYPES",
|
|
71
|
+
"register_custom_type",
|
|
72
|
+
"unregister_custom_type",
|
|
73
|
+
"get_id_field",
|
|
74
|
+
"get_receive_type",
|
|
75
|
+
"convert_to_send_type",
|
|
76
|
+
"convert_to_receive_type",
|
|
77
|
+
"infer_receive_type",
|
|
78
|
+
"get_target_id",
|
|
79
|
+
"get_send_type_and_target_id",
|
|
80
|
+
"is_standard_type",
|
|
81
|
+
"is_valid_send_type",
|
|
82
|
+
"get_standard_types",
|
|
83
|
+
"get_send_types",
|
|
84
|
+
"clear_custom_types",
|
|
85
|
+
]
|
|
@@ -22,3 +22,4 @@ from .notice import notice
|
|
|
22
22
|
from .request import request
|
|
23
23
|
from .meta import meta
|
|
24
24
|
from .wrapper import Event
|
|
25
|
+
from .session_type import RECEIVE_TYPES, SEND_TYPES, register_custom_type, unregister_custom_type, get_id_field, get_receive_type, convert_to_send_type, convert_to_receive_type, infer_receive_type, get_target_id, get_send_type_and_target_id, is_standard_type, is_valid_send_type, get_standard_types, get_send_types, clear_custom_types
|