ErisPulse 2.4.2.dev1__tar.gz → 2.4.3.dev1__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 (124) hide show
  1. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/.gitignore +1 -0
  2. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/PKG-INFO +42 -25
  3. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/README.md +40 -23
  4. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/pyproject.toml +2 -2
  5. erispulse-2.4.3.dev1/src/ErisPulse/CLI/commands/run.py +152 -0
  6. erispulse-2.4.3.dev1/src/ErisPulse/CLI/commands/run.pyi +63 -0
  7. erispulse-2.4.3.dev1/src/ErisPulse/Core/Bases/__init__.py +17 -0
  8. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/Core/Bases/__init__.pyi +3 -2
  9. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/Core/Bases/adapter.py +4 -5
  10. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/Core/Bases/adapter.pyi +1 -1
  11. erispulse-2.4.3.dev1/src/ErisPulse/Core/Bases/storage.py +438 -0
  12. erispulse-2.4.3.dev1/src/ErisPulse/Core/Bases/storage.pyi +318 -0
  13. erispulse-2.4.3.dev1/src/ErisPulse/Core/__init__.py +49 -0
  14. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/Core/__init__.pyi +1 -1
  15. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/Core/adapter.py +26 -11
  16. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/Core/adapter.pyi +6 -3
  17. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/Core/config.py +16 -4
  18. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/Core/config.pyi +7 -33
  19. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/Core/lifecycle.py +3 -1
  20. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/Core/lifecycle.pyi +0 -9
  21. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/Core/module.py +11 -7
  22. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/Core/module.pyi +3 -7
  23. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/Core/router.py +26 -16
  24. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/Core/router.pyi +1 -2
  25. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/Core/storage.py +445 -19
  26. erispulse-2.4.3.dev1/src/ErisPulse/Core/storage.pyi +404 -0
  27. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/__init__.py +0 -12
  28. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/__init__.pyi +1 -2
  29. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/finders/bases/finder.py +34 -0
  30. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/loaders/adapter.py +2 -2
  31. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/loaders/module.py +6 -2
  32. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/runtime/frame_config.py +17 -17
  33. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/sdk.py +98 -70
  34. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/sdk.pyi +7 -6
  35. erispulse-2.4.2.dev1/src/ErisPulse/CLI/commands/run.py +0 -252
  36. erispulse-2.4.2.dev1/src/ErisPulse/CLI/commands/run.pyi +0 -116
  37. erispulse-2.4.2.dev1/src/ErisPulse/Core/Bases/__init__.py +0 -14
  38. erispulse-2.4.2.dev1/src/ErisPulse/Core/__init__.py +0 -58
  39. erispulse-2.4.2.dev1/src/ErisPulse/Core/storage.pyi +0 -225
  40. erispulse-2.4.2.dev1/src/ErisPulse/runtime/cleanup.py +0 -202
  41. erispulse-2.4.2.dev1/src/ErisPulse/runtime/cleanup.pyi +0 -76
  42. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/LICENSE +0 -0
  43. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/CLI/__init__.py +0 -0
  44. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/CLI/__init__.pyi +0 -0
  45. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/CLI/base.py +0 -0
  46. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/CLI/base.pyi +0 -0
  47. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/CLI/cli.py +0 -0
  48. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/CLI/cli.pyi +0 -0
  49. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/CLI/commands/__init__.py +0 -0
  50. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/CLI/commands/__init__.pyi +0 -0
  51. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/CLI/commands/init.py +0 -0
  52. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/CLI/commands/init.pyi +0 -0
  53. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/CLI/commands/install.py +0 -0
  54. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/CLI/commands/install.pyi +0 -0
  55. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/CLI/commands/list.py +0 -0
  56. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/CLI/commands/list.pyi +0 -0
  57. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/CLI/commands/list_remote.py +0 -0
  58. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/CLI/commands/list_remote.pyi +0 -0
  59. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/CLI/commands/self_update.py +0 -0
  60. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/CLI/commands/self_update.pyi +0 -0
  61. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/CLI/commands/uninstall.py +0 -0
  62. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/CLI/commands/uninstall.pyi +0 -0
  63. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/CLI/commands/upgrade.py +0 -0
  64. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/CLI/commands/upgrade.pyi +0 -0
  65. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/CLI/console.py +0 -0
  66. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/CLI/console.pyi +0 -0
  67. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/CLI/registry.py +0 -0
  68. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/CLI/registry.pyi +0 -0
  69. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/CLI/utils/__init__.py +0 -0
  70. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/CLI/utils/__init__.pyi +0 -0
  71. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/CLI/utils/package_manager.py +0 -0
  72. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/CLI/utils/package_manager.pyi +0 -0
  73. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/Core/Bases/manager.py +0 -0
  74. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/Core/Bases/manager.pyi +0 -0
  75. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/Core/Bases/module.py +0 -0
  76. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/Core/Bases/module.pyi +0 -0
  77. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/Core/Event/__init__.py +0 -0
  78. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/Core/Event/__init__.pyi +0 -0
  79. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/Core/Event/base.py +0 -0
  80. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/Core/Event/base.pyi +0 -0
  81. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/Core/Event/command.py +0 -0
  82. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/Core/Event/command.pyi +0 -0
  83. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/Core/Event/message.py +0 -0
  84. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/Core/Event/message.pyi +0 -0
  85. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/Core/Event/message_builder.py +0 -0
  86. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/Core/Event/message_builder.pyi +0 -0
  87. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/Core/Event/meta.py +0 -0
  88. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/Core/Event/meta.pyi +0 -0
  89. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/Core/Event/notice.py +0 -0
  90. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/Core/Event/notice.pyi +0 -0
  91. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/Core/Event/request.py +0 -0
  92. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/Core/Event/request.pyi +0 -0
  93. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/Core/Event/session_type.py +0 -0
  94. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/Core/Event/session_type.pyi +0 -0
  95. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/Core/Event/wrapper.py +0 -0
  96. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/Core/Event/wrapper.pyi +0 -0
  97. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/Core/logger.py +0 -0
  98. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/Core/logger.pyi +0 -0
  99. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/__main__.py +0 -0
  100. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/__main__.pyi +0 -0
  101. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/finders/__init__.py +0 -0
  102. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/finders/__init__.pyi +0 -0
  103. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/finders/adapter.py +0 -0
  104. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/finders/adapter.pyi +0 -0
  105. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/finders/bases/__init__.py +0 -0
  106. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/finders/bases/__init__.pyi +0 -0
  107. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/finders/bases/finder.pyi +0 -0
  108. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/finders/module.py +0 -0
  109. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/finders/module.pyi +0 -0
  110. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/loaders/__init__.py +0 -0
  111. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/loaders/__init__.pyi +0 -0
  112. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/loaders/adapter.pyi +0 -0
  113. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/loaders/bases/__init__.py +0 -0
  114. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/loaders/bases/__init__.pyi +0 -0
  115. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/loaders/bases/loader.py +0 -0
  116. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/loaders/bases/loader.pyi +0 -0
  117. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/loaders/module.pyi +0 -0
  118. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/loaders/strategy.py +0 -0
  119. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/loaders/strategy.pyi +0 -0
  120. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/runtime/__init__.py +0 -0
  121. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/runtime/__init__.pyi +0 -0
  122. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/runtime/exceptions.py +0 -0
  123. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/runtime/exceptions.pyi +0 -0
  124. {erispulse-2.4.2.dev1 → erispulse-2.4.3.dev1}/src/ErisPulse/runtime/frame_config.pyi +0 -0
@@ -5,6 +5,7 @@ venvs
5
5
  config.toml
6
6
  uv.lock
7
7
  snapshots/
8
+ logs/
8
9
  config.db*
9
10
  .website
10
11
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ErisPulse
3
- Version: 2.4.2.dev1
3
+ Version: 2.4.3.dev1
4
4
  Summary: ErisPulse 是一个模块化、可扩展的异步 Python SDK 框架,主要用于构建高效、可维护的机器人应用程序。
5
5
  Author-email: ErisDev <erisdev@88.com>
6
6
  Maintainer-email: "艾莉丝·格雷拉特(WSu2059)" <wsu2059@qq.com>
@@ -44,11 +44,11 @@ Classifier: Typing :: Typed
44
44
  Requires-Python: >=3.10
45
45
  Requires-Dist: aiohttp>=3.9.0
46
46
  Requires-Dist: fastapi>=0.116.1
47
- Requires-Dist: hypercorn>=0.14.0
48
47
  Requires-Dist: packaging>=25.0
49
48
  Requires-Dist: pip>=23.0
50
49
  Requires-Dist: rich>=13.0.0
51
50
  Requires-Dist: toml>=0.10.2
51
+ Requires-Dist: uvicorn[standard]>=0.30.0
52
52
  Requires-Dist: watchdog>=4.0.0
53
53
  Provides-Extra: dev
54
54
  Requires-Dist: httpx>=0.24.0; extra == 'dev'
@@ -88,11 +88,10 @@ Description-Content-Type: text/markdown
88
88
  **事件驱动的多平台机器人开发框架**
89
89
 
90
90
  [![PyPI](https://img.shields.io/pypi/v/ErisPulse?style=flat-square)](https://pypi.org/project/ErisPulse/)
91
- [![Python Versions](https://img.shields.io/pypi/pyversions/ErisPulse?style=flat-square)](https://pypi.org/project/ErisPulse/)
92
- [![Docker Pulls](https://img.shields.io/docker/pulls/erispulse/erispulse?style=flat-square&logo=docker&label=pulls)](https://hub.docker.com/r/erispulse/erispulse)
93
- [![Docker Pulls](https://img.shields.io/docker/pulls/wsu2059/erispulse?style=flat-square&logo=docker&label=pulls)](https://hub.docker.com/r/erispulse/erispulse)
94
- [![Docker Version](https://img.shields.io/docker/v/erispulse/erispulse?style=flat-square&logo=docker&label=docker)](https://hub.docker.com/r/erispulse/erispulse)
91
+ [![Docker](https://img.shields.io/badge/Docker-2496ED?style=flat-square&logo=docker&logoColor=white)](https://hub.docker.com/r/erispulse/erispulse)
92
+ [![Python](https://img.shields.io/badge/Python-3.10+-3776AB?style=flat-square&logo=python&logoColor=white)](https://pypi.org/project/ErisPulse/)
95
93
  [![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)
94
+ [![Socket Badge](https://socket.dev/api/badge/pypi/package/ErisPulse/latest)](https://socket.dev/pypi/package/ErisPulse)
96
95
 
97
96
  </td>
98
97
  </tr>
@@ -112,6 +111,25 @@ ErisPulse 是一个基于 Python 的事件驱动型多平台机器人开发框
112
111
  - **热重载支持** - 开发时无需重启即可重新加载代码
113
112
  - **完整工具链** - 提供 CLI 工具、包管理和自动化脚本
114
113
 
114
+ ## 支持的适配器
115
+
116
+ 欢迎您贡献适配器!
117
+
118
+ | 适配器 | 说明 |
119
+ |--------|------|
120
+ | [Kook](https://github.com/shanfishapp/ErisPulse-KookAdapter) | Kook(开黑啦)即时通讯平台 |
121
+ | [Matrix](https://github.com/ErisPulse/ErisPulse-MatrixAdapter) | Matrix 去中心化通讯协议 |
122
+ | [OneBot11](https://github.com/ErisPulse/ErisPulse-OneBot11Adapter) | OneBot v11 通用机器人协议 |
123
+ | [OneBot12](https://github.com/ErisPulse/ErisPulse-OneBot12Adapter) | OneBot v12 标准协议 |
124
+ | [QQ](https://github.com/ErisPulse/ErisPulse-QQBotAdapter) | QQ 官方机器人平台 |
125
+ | [沙箱](https://github.com/ErisPulse/ErisPulse-SandboxAdapter) | 网页端调试,无需接入真实平台 |
126
+ | [Telegram](https://github.com/ErisPulse/ErisPulse-TelegramAdapter) | 全球性即时通讯平台 |
127
+ | [邮件](https://github.com/ErisPulse/ErisPulse-EmailAdapter) | 邮件协议收发适配器 |
128
+ | [云湖](https://github.com/ErisPulse/ErisPulse-YunhuAdapter) | 企业级即时通讯平台(机器人接入) |
129
+ | [云湖用户](https://github.com/wsu2059q/ErisPulse-YunhuUserAdapter) | 基于云湖用户协议的接入适配器 |
130
+
131
+ 查看 [适配器详情介绍](docs/zh-CN/platform-guide/README.md)
132
+
115
133
  ## 快速开始
116
134
 
117
135
  ### 使用 Docker (推荐)
@@ -120,6 +138,22 @@ ErisPulse 是一个基于 Python 的事件驱动型多平台机器人开发框
120
138
  docker pull erispulse/erispulse:latest
121
139
  ```
122
140
 
141
+ <details>
142
+ <summary>Docker Hub不可用?</summary>
143
+
144
+ 如果 Docker Hub 无法访问,可以使用 GitHub Container Registry:
145
+
146
+ ```bash
147
+ docker pull ghcr.io/erispulse/erispulse:latest
148
+ ```
149
+
150
+ 使用 ghcr.io 镜像时,需要修改 `docker-compose.yml` 中的 image:
151
+ ```yaml
152
+ image: ghcr.io/erispulse/erispulse:latest
153
+ ```
154
+
155
+ </details>
156
+
123
157
  <details>
124
158
  <summary>快速启动</summary>
125
159
 
@@ -133,9 +167,9 @@ ERISPULSE_DASHBOARD_TOKEN=your-token docker compose up -d
133
167
 
134
168
  > 镜像内置 ErisPulse 框架和 Dashboard 管理面板,支持 `linux/amd64` 和 `linux/arm64` 架构。
135
169
 
136
- </details>
170
+ 启动后访问 `http://<host>:<port>/Dashboard`,使用设置的令牌作为密码登录 Dashboard 管理面板。
137
171
 
138
- 启动后访问 `http://localhost:8000/Dashboard`,使用设置的令牌作为密码登录 Dashboard 管理面板。
172
+ </details>
139
173
 
140
174
  ### 使用 pip 安装
141
175
 
@@ -231,23 +265,6 @@ epsdk run main.py --reload
231
265
  - **自动化工具** - 消息通知、任务管理、数据收集
232
266
  - **消息转发** - 跨平台消息同步和转发
233
267
 
234
- ## 支持的适配器
235
-
236
- 欢迎您贡献适配器!
237
-
238
- | 适配器 | 说明 |
239
- |--------|------|
240
- | [云湖](https://github.com/ErisPulse/ErisPulse-YunhuAdapter) | 企业级即时通讯平台(机器人账户) |
241
- | [云湖用户](https://github.com/wsu2059q/ErisPulse-YunhuUserAdapter) | 基于云湖用户账户的适配器 |
242
- | [Telegram](https://github.com/ErisPulse/ErisPulse-TelegramAdapter) | 全球性即时通讯软件 |
243
- | [OneBot11](https://github.com/ErisPulse/ErisPulse-OneBot11Adapter) | 通用机器人接口标准 |
244
- | [OneBot12](https://github.com/ErisPulse/ErisPulse-OneBot12Adapter) | OneBot12 标准 |
245
- | [邮件](https://github.com/ErisPulse/ErisPulse-EmailAdapter) | 邮件收发处理 |
246
- | [沙箱](https://github.com/ErisPulse/ErisPulse-SandboxAdapter) | 网页调试界面,无需接入实际平台 |
247
- | [Kook](https://github.com/shanfishapp/ErisPulse-KookAdapter) | Kook(开黑啦)即时通讯平台 |
248
-
249
- 查看 [适配器详情介绍](docs/zh-CN/platform-guide/README.md)
250
-
251
268
  ## 文档资源
252
269
 
253
270
  | 简体中文 | English | 繁體中文 |
@@ -16,11 +16,10 @@
16
16
  **事件驱动的多平台机器人开发框架**
17
17
 
18
18
  [![PyPI](https://img.shields.io/pypi/v/ErisPulse?style=flat-square)](https://pypi.org/project/ErisPulse/)
19
- [![Python Versions](https://img.shields.io/pypi/pyversions/ErisPulse?style=flat-square)](https://pypi.org/project/ErisPulse/)
20
- [![Docker Pulls](https://img.shields.io/docker/pulls/erispulse/erispulse?style=flat-square&logo=docker&label=pulls)](https://hub.docker.com/r/erispulse/erispulse)
21
- [![Docker Pulls](https://img.shields.io/docker/pulls/wsu2059/erispulse?style=flat-square&logo=docker&label=pulls)](https://hub.docker.com/r/erispulse/erispulse)
22
- [![Docker Version](https://img.shields.io/docker/v/erispulse/erispulse?style=flat-square&logo=docker&label=docker)](https://hub.docker.com/r/erispulse/erispulse)
19
+ [![Docker](https://img.shields.io/badge/Docker-2496ED?style=flat-square&logo=docker&logoColor=white)](https://hub.docker.com/r/erispulse/erispulse)
20
+ [![Python](https://img.shields.io/badge/Python-3.10+-3776AB?style=flat-square&logo=python&logoColor=white)](https://pypi.org/project/ErisPulse/)
23
21
  [![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)
22
+ [![Socket Badge](https://socket.dev/api/badge/pypi/package/ErisPulse/latest)](https://socket.dev/pypi/package/ErisPulse)
24
23
 
25
24
  </td>
26
25
  </tr>
@@ -40,6 +39,25 @@ ErisPulse 是一个基于 Python 的事件驱动型多平台机器人开发框
40
39
  - **热重载支持** - 开发时无需重启即可重新加载代码
41
40
  - **完整工具链** - 提供 CLI 工具、包管理和自动化脚本
42
41
 
42
+ ## 支持的适配器
43
+
44
+ 欢迎您贡献适配器!
45
+
46
+ | 适配器 | 说明 |
47
+ |--------|------|
48
+ | [Kook](https://github.com/shanfishapp/ErisPulse-KookAdapter) | Kook(开黑啦)即时通讯平台 |
49
+ | [Matrix](https://github.com/ErisPulse/ErisPulse-MatrixAdapter) | Matrix 去中心化通讯协议 |
50
+ | [OneBot11](https://github.com/ErisPulse/ErisPulse-OneBot11Adapter) | OneBot v11 通用机器人协议 |
51
+ | [OneBot12](https://github.com/ErisPulse/ErisPulse-OneBot12Adapter) | OneBot v12 标准协议 |
52
+ | [QQ](https://github.com/ErisPulse/ErisPulse-QQBotAdapter) | QQ 官方机器人平台 |
53
+ | [沙箱](https://github.com/ErisPulse/ErisPulse-SandboxAdapter) | 网页端调试,无需接入真实平台 |
54
+ | [Telegram](https://github.com/ErisPulse/ErisPulse-TelegramAdapter) | 全球性即时通讯平台 |
55
+ | [邮件](https://github.com/ErisPulse/ErisPulse-EmailAdapter) | 邮件协议收发适配器 |
56
+ | [云湖](https://github.com/ErisPulse/ErisPulse-YunhuAdapter) | 企业级即时通讯平台(机器人接入) |
57
+ | [云湖用户](https://github.com/wsu2059q/ErisPulse-YunhuUserAdapter) | 基于云湖用户协议的接入适配器 |
58
+
59
+ 查看 [适配器详情介绍](docs/zh-CN/platform-guide/README.md)
60
+
43
61
  ## 快速开始
44
62
 
45
63
  ### 使用 Docker (推荐)
@@ -48,6 +66,22 @@ ErisPulse 是一个基于 Python 的事件驱动型多平台机器人开发框
48
66
  docker pull erispulse/erispulse:latest
49
67
  ```
50
68
 
69
+ <details>
70
+ <summary>Docker Hub不可用?</summary>
71
+
72
+ 如果 Docker Hub 无法访问,可以使用 GitHub Container Registry:
73
+
74
+ ```bash
75
+ docker pull ghcr.io/erispulse/erispulse:latest
76
+ ```
77
+
78
+ 使用 ghcr.io 镜像时,需要修改 `docker-compose.yml` 中的 image:
79
+ ```yaml
80
+ image: ghcr.io/erispulse/erispulse:latest
81
+ ```
82
+
83
+ </details>
84
+
51
85
  <details>
52
86
  <summary>快速启动</summary>
53
87
 
@@ -61,9 +95,9 @@ ERISPULSE_DASHBOARD_TOKEN=your-token docker compose up -d
61
95
 
62
96
  > 镜像内置 ErisPulse 框架和 Dashboard 管理面板,支持 `linux/amd64` 和 `linux/arm64` 架构。
63
97
 
64
- </details>
98
+ 启动后访问 `http://<host>:<port>/Dashboard`,使用设置的令牌作为密码登录 Dashboard 管理面板。
65
99
 
66
- 启动后访问 `http://localhost:8000/Dashboard`,使用设置的令牌作为密码登录 Dashboard 管理面板。
100
+ </details>
67
101
 
68
102
  ### 使用 pip 安装
69
103
 
@@ -159,23 +193,6 @@ epsdk run main.py --reload
159
193
  - **自动化工具** - 消息通知、任务管理、数据收集
160
194
  - **消息转发** - 跨平台消息同步和转发
161
195
 
162
- ## 支持的适配器
163
-
164
- 欢迎您贡献适配器!
165
-
166
- | 适配器 | 说明 |
167
- |--------|------|
168
- | [云湖](https://github.com/ErisPulse/ErisPulse-YunhuAdapter) | 企业级即时通讯平台(机器人账户) |
169
- | [云湖用户](https://github.com/wsu2059q/ErisPulse-YunhuUserAdapter) | 基于云湖用户账户的适配器 |
170
- | [Telegram](https://github.com/ErisPulse/ErisPulse-TelegramAdapter) | 全球性即时通讯软件 |
171
- | [OneBot11](https://github.com/ErisPulse/ErisPulse-OneBot11Adapter) | 通用机器人接口标准 |
172
- | [OneBot12](https://github.com/ErisPulse/ErisPulse-OneBot12Adapter) | OneBot12 标准 |
173
- | [邮件](https://github.com/ErisPulse/ErisPulse-EmailAdapter) | 邮件收发处理 |
174
- | [沙箱](https://github.com/ErisPulse/ErisPulse-SandboxAdapter) | 网页调试界面,无需接入实际平台 |
175
- | [Kook](https://github.com/shanfishapp/ErisPulse-KookAdapter) | Kook(开黑啦)即时通讯平台 |
176
-
177
- 查看 [适配器详情介绍](docs/zh-CN/platform-guide/README.md)
178
-
179
196
  ## 文档资源
180
197
 
181
198
  | 简体中文 | English | 繁體中文 |
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "ErisPulse"
7
- version = "2.4.2-dev.1"
7
+ version = "2.4.3-dev.1"
8
8
  description = "ErisPulse 是一个模块化、可扩展的异步 Python SDK 框架,主要用于构建高效、可维护的机器人应用程序。"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -55,7 +55,7 @@ dependencies = [
55
55
  "watchdog>=4.0.0",
56
56
  "toml>=0.10.2",
57
57
  "fastapi>=0.116.1",
58
- "hypercorn>=0.14.0",
58
+ "uvicorn[standard]>=0.30.0",
59
59
  "packaging>=25.0",
60
60
  ]
61
61
 
@@ -0,0 +1,152 @@
1
+ """
2
+ Run 命令实现
3
+
4
+ 直接运行主程序,支持热重载模式
5
+ """
6
+
7
+ import os
8
+ import time
9
+ import asyncio
10
+ from argparse import ArgumentParser
11
+ from watchdog.observers import Observer
12
+ from rich.panel import Panel
13
+ from watchdog.events import FileSystemEventHandler
14
+
15
+ from ..console import console
16
+ from ..base import Command
17
+
18
+
19
+ class ReloadHandler(FileSystemEventHandler):
20
+ """
21
+ 文件系统事件处理器
22
+
23
+ 监控 .py 文件变更并触发 sdk.restart() 热重载
24
+
25
+ {!--< tips >!--}
26
+ 1. 文件监控运行在独立线程
27
+ 2. 通过 run_coroutine_threadsafe 安全调度到事件循环
28
+ 3. 内置 1 秒防抖,避免短时间内多次重载
29
+ {!--< /tips >!--}
30
+ """
31
+
32
+ def __init__(self, loop: asyncio.AbstractEventLoop):
33
+ super().__init__()
34
+ self._loop = loop
35
+ self._last_reload = 0.0
36
+
37
+ def on_modified(self, event):
38
+ now = time.time()
39
+ if now - self._last_reload < 1.0:
40
+ return
41
+ if event.src_path.endswith(".py"):
42
+ self._last_reload = now
43
+ self._schedule_reload(event)
44
+
45
+ def _schedule_reload(self, event):
46
+ async def _do_reload():
47
+ try:
48
+ from ... import sdk
49
+ await sdk.restart()
50
+ except Exception as e:
51
+ console.print(f"[error]热重载失败: {e}[/]")
52
+
53
+ console.print(f"检测到文件变更 ({os.path.basename(event.src_path)}),正在热重载...")
54
+ asyncio.run_coroutine_threadsafe(_do_reload(), self._loop)
55
+
56
+
57
+ class RunCommand(Command):
58
+ """
59
+ Run 命令
60
+
61
+ 运行主程序,支持热重载模式
62
+ """
63
+
64
+ name = "run"
65
+ description = "运行主程序"
66
+
67
+ def add_arguments(self, parser: ArgumentParser):
68
+ parser.add_argument(
69
+ 'script',
70
+ nargs='?',
71
+ default=None,
72
+ help='要运行的主程序路径 (不指定则直接运行 SDK)'
73
+ )
74
+ parser.add_argument(
75
+ '--reload',
76
+ action='store_true',
77
+ default=False,
78
+ help='启用热重载模式'
79
+ )
80
+
81
+ def execute(self, args):
82
+ script = args.script
83
+ reload_mode = args.reload
84
+
85
+ if script:
86
+ if not os.path.exists(script):
87
+ console.print(f"[error]脚本 [path]{script}[/] 不存在[/]")
88
+ console.print("[info]使用 [cyan]epsdk init[/cyan] 创建新项目[/]")
89
+ return
90
+ self._run_script(script, reload_mode)
91
+ else:
92
+ self._run_internal(reload_mode)
93
+
94
+ def _run_internal(self, reload_mode: bool):
95
+ """
96
+ 直接运行 SDK(不指定脚本时)
97
+ """
98
+ async def _run():
99
+ from ... import sdk
100
+
101
+ if reload_mode:
102
+ loop = asyncio.get_running_loop()
103
+ self._setup_watchdog(".", loop)
104
+
105
+ await sdk.run(keep_running=True)
106
+
107
+ try:
108
+ asyncio.run(_run())
109
+ except KeyboardInterrupt:
110
+ pass
111
+ finally:
112
+ if reload_mode and hasattr(self, '_observer'):
113
+ self._observer.stop()
114
+ self._observer.join()
115
+
116
+ def _run_script(self, script_path: str, reload_mode: bool):
117
+ """
118
+ 运行指定脚本文件
119
+ """
120
+ async def _run():
121
+ from ... import sdk
122
+
123
+ if reload_mode:
124
+ loop = asyncio.get_running_loop()
125
+ watch_dir = os.path.dirname(os.path.abspath(script_path))
126
+ self._setup_watchdog(watch_dir, loop)
127
+
128
+ await sdk.run(keep_running=True)
129
+
130
+ try:
131
+ asyncio.run(_run())
132
+ except KeyboardInterrupt:
133
+ pass
134
+ finally:
135
+ if reload_mode and hasattr(self, '_observer'):
136
+ self._observer.stop()
137
+ self._observer.join()
138
+
139
+ def _setup_watchdog(self, watch_dir: str, loop: asyncio.AbstractEventLoop):
140
+ if not os.path.exists(watch_dir):
141
+ return
142
+
143
+ self._observer = Observer()
144
+ self._handler = ReloadHandler(loop=loop)
145
+ self._observer.schedule(self._handler, watch_dir, recursive=True)
146
+ self._observer.start()
147
+
148
+ console.print(Panel(
149
+ f"[bold]开发重载模式[/]\n监控目录: [path]{watch_dir}[/]",
150
+ title="热重载已启动",
151
+ border_style="info"
152
+ ))
@@ -0,0 +1,63 @@
1
+ # type: ignore
2
+ #
3
+ # Auto-generated type stub for run.py
4
+ # DO NOT EDIT MANUALLY - Generated by generate-type-stubs.py
5
+ #
6
+
7
+ """
8
+ Run 命令实现
9
+
10
+ 直接运行主程序,支持热重载模式
11
+ """
12
+
13
+ import os
14
+ import time
15
+ import asyncio
16
+ from argparse import ArgumentParser
17
+ from watchdog.observers import Observer
18
+ from rich.panel import Panel
19
+ from watchdog.events import FileSystemEventHandler
20
+ from ..console import console
21
+ from ..base import Command
22
+
23
+ class ReloadHandler(FileSystemEventHandler):
24
+ """
25
+ 文件系统事件处理器
26
+
27
+ 监控 .py 文件变更并触发 sdk.restart() 热重载
28
+
29
+ {!--< tips >!--}
30
+ 1. 文件监控运行在独立线程
31
+ 2. 通过 run_coroutine_threadsafe 安全调度到事件循环
32
+ 3. 内置 1 秒防抖,避免短时间内多次重载
33
+ {!--< /tips >!--}
34
+ """
35
+ def __init__(self: None, loop: asyncio.AbstractEventLoop) -> ...:
36
+ ...
37
+ def on_modified(self: object, event: ...) -> ...:
38
+ ...
39
+ def _schedule_reload(self: object, event: ...) -> ...:
40
+ ...
41
+
42
+ class RunCommand(Command):
43
+ """
44
+ Run 命令
45
+
46
+ 运行主程序,支持热重载模式
47
+ """
48
+ def add_arguments(self: object, parser: ArgumentParser) -> ...:
49
+ ...
50
+ def execute(self: object, args: ...) -> ...:
51
+ ...
52
+ def _run_internal(self: object, reload_mode: bool) -> ...:
53
+ """
54
+ 直接运行 SDK(不指定脚本时)
55
+ """
56
+ ...
57
+ def _run_script(self: object, script_path: str, reload_mode: bool) -> ...:
58
+ """
59
+ 运行指定脚本文件
60
+ """
61
+ ...
62
+ def _setup_watchdog(self: object, watch_dir: str, loop: asyncio.AbstractEventLoop) -> ...:
63
+ ...
@@ -0,0 +1,17 @@
1
+ """
2
+ ErisPulse 基础模块
3
+
4
+ 提供平台适配器、模块和存储后端的基类
5
+ """
6
+
7
+ from .adapter import SendDSL, BaseAdapter
8
+ from .module import BaseModule
9
+ from .storage import BaseStorage, BaseQueryBuilder
10
+
11
+ __all__ = [
12
+ "BaseAdapter",
13
+ "SendDSL",
14
+ "BaseModule",
15
+ "BaseStorage",
16
+ "BaseQueryBuilder",
17
+ ]
@@ -6,9 +6,10 @@
6
6
 
7
7
  """
8
8
  ErisPulse 基础模块
9
-
10
- 提供平台适配器以及模块的基类
9
+
10
+ 提供平台适配器、模块和存储后端的基类
11
11
  """
12
12
 
13
13
  from .adapter import SendDSL, BaseAdapter
14
14
  from .module import BaseModule
15
+ from .storage import BaseStorage, BaseQueryBuilder
@@ -341,11 +341,10 @@ class BaseAdapter(ABC):
341
341
  """
342
342
  raise NotImplementedError("适配器必须实现shutdown方法")
343
343
 
344
- async def emit(self) -> None:
345
- from ..logger import logger
346
-
347
- logger.error(
348
- "适配器调用了一个被弃用的原生方法emit,请检查适配器的实现,如果你是开发者请查看ErisPulse的文档进行更新。如果你是普通用户请查看本适配器是否有更新"
344
+ async def emit(self, *args, **kwargs):
345
+ raise NotImplementedError(
346
+ "适配器的 emit 方法已被弃用。请使用 adapter.emit() 通过 AdapterManager 提交事件。"
347
+ "如果你是适配器开发者,请查看 ErisPulse 文档进行更新。"
349
348
  )
350
349
 
351
350
  def send(
@@ -158,7 +158,7 @@ class BaseAdapter(ABC):
158
158
  :raises NotImplementedError: 必须由子类实现
159
159
  """
160
160
  ...
161
- async def emit(self: object) -> None:
161
+ async def emit(self: object, *args: ..., **kwargs: ...) -> ...:
162
162
  ...
163
163
  def send(self: object, target_type: str, target_id: str, message: Any, **kwargs: Any) -> asyncio.Task:
164
164
  """