ErisPulse 2.3.5.dev1__tar.gz → 2.3.6.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 (121) hide show
  1. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/.gitignore +1 -9
  2. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/LICENSE +1 -17
  3. erispulse-2.3.6.dev1/PKG-INFO +233 -0
  4. erispulse-2.3.6.dev1/README.md +173 -0
  5. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/pyproject.toml +37 -11
  6. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/CLI/console.py +0 -5
  7. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/Core/Bases/__init__.py +1 -1
  8. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/Core/Bases/__init__.pyi +1 -1
  9. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/Core/Bases/adapter.py +27 -1
  10. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/Core/Bases/adapter.pyi +10 -0
  11. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/Core/Event/base.py +1 -1
  12. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/Core/Event/base.pyi +1 -1
  13. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/Core/Event/command.py +1 -1
  14. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/Core/Event/command.pyi +1 -1
  15. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/Core/Event/wrapper.py +42 -7
  16. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/Core/Event/wrapper.pyi +21 -5
  17. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/Core/__init__.py +6 -2
  18. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/Core/__init__.pyi +6 -1
  19. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/Core/adapter.py +153 -46
  20. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/Core/adapter.pyi +44 -8
  21. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/Core/config.py +65 -1
  22. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/Core/config.pyi +6 -0
  23. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/Core/logger.py +46 -2
  24. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/Core/logger.pyi +34 -0
  25. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/Core/module.py +28 -8
  26. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/Core/module.pyi +9 -0
  27. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/Core/router.py +103 -40
  28. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/Core/router.pyi +4 -2
  29. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/Core/storage.py +16 -18
  30. erispulse-2.3.6.dev1/src/ErisPulse/__init__.py +76 -0
  31. erispulse-2.3.6.dev1/src/ErisPulse/__init__.pyi +22 -0
  32. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/loaders/adapter.py +17 -12
  33. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/loaders/adapter.pyi +2 -1
  34. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/loaders/initializer.py +43 -16
  35. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/loaders/module.py +17 -13
  36. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/loaders/module.pyi +2 -1
  37. erispulse-2.3.6.dev1/src/ErisPulse/runtime/__init__.py +47 -0
  38. erispulse-2.3.6.dev1/src/ErisPulse/runtime/__init__.pyi +18 -0
  39. {erispulse-2.3.5.dev1/src/ErisPulse/Core → erispulse-2.3.6.dev1/src/ErisPulse/runtime}/exceptions.py +29 -22
  40. {erispulse-2.3.5.dev1/src/ErisPulse/Core → erispulse-2.3.6.dev1/src/ErisPulse/runtime}/exceptions.pyi +7 -3
  41. erispulse-2.3.5.dev1/src/ErisPulse/_bootstrap.py → erispulse-2.3.6.dev1/src/ErisPulse/runtime/frame_config.py +55 -21
  42. erispulse-2.3.5.dev1/src/ErisPulse/_bootstrap.pyi → erispulse-2.3.6.dev1/src/ErisPulse/runtime/frame_config.pyi +16 -8
  43. erispulse-2.3.6.dev1/src/ErisPulse/sdk.py +493 -0
  44. erispulse-2.3.6.dev1/src/ErisPulse/sdk.pyi +162 -0
  45. erispulse-2.3.5.dev1/PKG-INFO +0 -189
  46. erispulse-2.3.5.dev1/README.md +0 -121
  47. erispulse-2.3.5.dev1/src/ErisPulse/__init__.py +0 -421
  48. erispulse-2.3.5.dev1/src/ErisPulse/__init__.pyi +0 -113
  49. erispulse-2.3.5.dev1/src/ErisPulse/sdk.py +0 -146
  50. erispulse-2.3.5.dev1/src/ErisPulse/sdk.pyi +0 -81
  51. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/CLI/__init__.py +0 -0
  52. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/CLI/__init__.pyi +0 -0
  53. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/CLI/base.py +0 -0
  54. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/CLI/base.pyi +0 -0
  55. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/CLI/cli.py +0 -0
  56. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/CLI/cli.pyi +0 -0
  57. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/CLI/commands/__init__.py +0 -0
  58. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/CLI/commands/__init__.pyi +0 -0
  59. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/CLI/commands/init.py +0 -0
  60. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/CLI/commands/init.pyi +0 -0
  61. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/CLI/commands/install.py +0 -0
  62. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/CLI/commands/install.pyi +0 -0
  63. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/CLI/commands/list.py +0 -0
  64. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/CLI/commands/list.pyi +0 -0
  65. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/CLI/commands/list_remote.py +0 -0
  66. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/CLI/commands/list_remote.pyi +0 -0
  67. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/CLI/commands/run.py +0 -0
  68. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/CLI/commands/run.pyi +0 -0
  69. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/CLI/commands/self_update.py +0 -0
  70. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/CLI/commands/self_update.pyi +0 -0
  71. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/CLI/commands/uninstall.py +0 -0
  72. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/CLI/commands/uninstall.pyi +0 -0
  73. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/CLI/commands/upgrade.py +0 -0
  74. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/CLI/commands/upgrade.pyi +0 -0
  75. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/CLI/console.pyi +0 -0
  76. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/CLI/registry.py +0 -0
  77. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/CLI/registry.pyi +0 -0
  78. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/CLI/utils/__init__.py +0 -0
  79. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/CLI/utils/__init__.pyi +0 -0
  80. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/CLI/utils/package_manager.py +0 -0
  81. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/CLI/utils/package_manager.pyi +0 -0
  82. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/Core/Bases/manager.py +0 -0
  83. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/Core/Bases/manager.pyi +0 -0
  84. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/Core/Bases/module.py +0 -0
  85. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/Core/Bases/module.pyi +0 -0
  86. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/Core/Event/__init__.py +0 -0
  87. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/Core/Event/__init__.pyi +0 -0
  88. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/Core/Event/message.py +0 -0
  89. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/Core/Event/message.pyi +0 -0
  90. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/Core/Event/meta.py +0 -0
  91. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/Core/Event/meta.pyi +0 -0
  92. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/Core/Event/notice.py +0 -0
  93. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/Core/Event/notice.pyi +0 -0
  94. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/Core/Event/request.py +0 -0
  95. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/Core/Event/request.pyi +0 -0
  96. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/Core/lifecycle.py +0 -0
  97. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/Core/lifecycle.pyi +0 -0
  98. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/Core/storage.pyi +0 -0
  99. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/__main__.py +0 -0
  100. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/__main__.pyi +0 -0
  101. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/finders/__init__.py +0 -0
  102. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/finders/__init__.pyi +0 -0
  103. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/finders/adapter.py +0 -0
  104. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/finders/adapter.pyi +0 -0
  105. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/finders/bases/__init__.py +0 -0
  106. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/finders/bases/__init__.pyi +0 -0
  107. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/finders/bases/finder.py +0 -0
  108. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/finders/bases/finder.pyi +0 -0
  109. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/finders/cli.py +0 -0
  110. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/finders/cli.pyi +0 -0
  111. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/finders/module.py +0 -0
  112. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/finders/module.pyi +0 -0
  113. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/loaders/__init__.py +0 -0
  114. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/loaders/__init__.pyi +0 -0
  115. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/loaders/bases/__init__.py +0 -0
  116. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/loaders/bases/__init__.pyi +0 -0
  117. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/loaders/bases/loader.py +0 -0
  118. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/loaders/bases/loader.pyi +0 -0
  119. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/loaders/initializer.pyi +0 -0
  120. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/loaders/strategy.py +0 -0
  121. {erispulse-2.3.5.dev1 → erispulse-2.3.6.dev1}/src/ErisPulse/loaders/strategy.pyi +0 -0
@@ -3,7 +3,6 @@ devs/videos
3
3
  main.py
4
4
  venvs
5
5
  config.toml
6
- adapters
7
6
  uv.lock
8
7
  snapshots/
9
8
  config.db*
@@ -206,11 +205,4 @@ cython_debug/
206
205
  bin
207
206
  include
208
207
  lib
209
- pyvenv.cfg
210
-
211
- # erispulse
212
- my_bot
213
- modules
214
- config.toml
215
- devs/test_st.py
216
- docs/ux-improvements.md
208
+ pyvenv.cfg
@@ -1,8 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2025 ErisPulse
4
-
5
- Portions of this software are based on https://github.com/runoneall/sdkFrame.
3
+ Copyright (c) 2025-2026 ErisPulse
6
4
 
7
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
8
6
  of this software and associated documentation files (the "Software"), to deal
@@ -21,17 +19,3 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21
19
  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22
20
  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23
21
  SOFTWARE.
24
-
25
- This SDK's core adapter standardization layer strictly follows OneBot12 specifications (https://12.onebot.dev/) for:
26
- - Event data normalization
27
- - API request/response formats
28
- - Message segment definitions
29
- - Metadata definitions
30
-
31
- This ensures consistent behavior and interoperability across all adapter implementations.
32
-
33
- We extend our gratitude to all developers and authors who contribute to the open-source community.
34
-
35
- Please respect the efforts of every open-source author. By using, modifying, or distributing this software, you commit to strictly adhering to the relevant license terms and preserving all original copyright notices.
36
-
37
- The core of the open-source spirit lies in sharing, collaboration, and respect. Through this project, we hope to carry forward this spirit and contribute to the development of the open-source community.
@@ -0,0 +1,233 @@
1
+ Metadata-Version: 2.4
2
+ Name: ErisPulse
3
+ Version: 2.3.6.dev1
4
+ Summary: ErisPulse 是一个模块化、可扩展的异步 Python SDK 框架,主要用于构建高效、可维护的机器人应用程序。
5
+ Author-email: "艾莉丝·格雷拉特(WSu2059)" <wsu2059@qq.com>
6
+ Maintainer-email: "艾莉丝·格雷拉特(WSu2059)" <wsu2059@qq.com>
7
+ License: MIT License
8
+
9
+ Copyright (c) 2025-2026 ErisPulse
10
+
11
+ Permission is hereby granted, free of charge, to any person obtaining a copy
12
+ of this software and associated documentation files (the "Software"), to deal
13
+ in the Software without restriction, including without limitation the rights
14
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
15
+ copies of the Software, and to permit persons to whom the Software is
16
+ furnished to do so, subject to the following conditions:
17
+
18
+ The above copyright notice and this permission notice shall be included in all
19
+ copies or substantial portions of the Software.
20
+
21
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
22
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
23
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
24
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
25
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
26
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
27
+ SOFTWARE.
28
+ License-File: LICENSE
29
+ Keywords: async,asyncio,bot,extensible,framework,modular,onebot,robot,sdk,telegram
30
+ Classifier: Development Status :: 4 - Beta
31
+ Classifier: Framework :: AsyncIO
32
+ Classifier: Intended Audience :: Developers
33
+ Classifier: License :: OSI Approved :: MIT License
34
+ Classifier: Operating System :: OS Independent
35
+ Classifier: Programming Language :: Python :: 3
36
+ Classifier: Programming Language :: Python :: 3 :: Only
37
+ Classifier: Programming Language :: Python :: 3.10
38
+ Classifier: Programming Language :: Python :: 3.11
39
+ Classifier: Programming Language :: Python :: 3.12
40
+ Classifier: Programming Language :: Python :: 3.13
41
+ Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
42
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
43
+ Classifier: Typing :: Typed
44
+ Requires-Python: >=3.10
45
+ Requires-Dist: aiohttp>=3.9.0
46
+ Requires-Dist: fastapi>=0.116.1
47
+ Requires-Dist: hypercorn>=0.14.0
48
+ Requires-Dist: packaging>=25.0
49
+ Requires-Dist: pip>=23.0
50
+ Requires-Dist: rich>=13.0.0
51
+ Requires-Dist: toml>=0.10.2
52
+ Requires-Dist: watchdog>=4.0.0
53
+ Provides-Extra: test
54
+ Requires-Dist: pytest-asyncio>=0.21.0; extra == 'test'
55
+ Requires-Dist: pytest-cov>=4.0.0; extra == 'test'
56
+ Requires-Dist: pytest-mock>=3.10.0; extra == 'test'
57
+ Requires-Dist: pytest-xdist>=3.0.0; extra == 'test'
58
+ Requires-Dist: pytest>=7.0.0; extra == 'test'
59
+ Description-Content-Type: text/markdown
60
+
61
+ <table>
62
+ <tr>
63
+ <td width="35%" valign="middle" align="center">
64
+ <img src=".github/assets/erispulse_logo_1024.png" width="280" alt="ErisPulse" />
65
+ </td>
66
+ <td width="65%" valign="middle">
67
+
68
+ # ErisPulse
69
+
70
+ **事件驱动的多平台机器人开发框架**
71
+
72
+ [![PyPI](https://img.shields.io/pypi/v/ErisPulse?style=flat-square)](https://pypi.org/project/ErisPulse/)
73
+ [![Python Versions](https://img.shields.io/pypi/pyversions/ErisPulse?style=flat-square)](https://pypi.org/project/ErisPulse/)
74
+ [![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)
75
+ [![Socket Badge](https://socket.dev/api/badge/pypi/package/ErisPulse/latest)](https://socket.dev/pypi/package/ErisPulse)
76
+
77
+ </td>
78
+ </tr>
79
+ </table>
80
+
81
+ ---
82
+
83
+ ## 简介
84
+
85
+ ErisPulse 是一个基于 Python 的事件驱动型多平台机器人开发框架。通过统一的 OneBot12 标准接口,您可以一次编写代码,同时在云湖、Telegram、OneBot 等多个平台部署相同功能的机器人。框架提供灵活的模块(`插件`)系统、热重载支持和完整的开发者工具链,适用于从简单聊天机器人到复杂自动化系统的各种场景。
86
+
87
+ ## 核心特性
88
+
89
+ - **事件驱动架构** - 基于 OneBot12 标准的清晰事件模型
90
+ - **跨平台兼容** - 插件模块编写一次即可在所有平台使用
91
+ - **模块化设计** - 灵活的插件系统,易于扩展和集成
92
+ - **热重载支持** - 开发时无需重启即可重新加载代码
93
+ - **完整工具链** - 提供 CLI 工具、包管理和自动化脚本
94
+
95
+ ## 快速开始
96
+
97
+ ### 安装
98
+
99
+ ```bash
100
+ pip install ErisPulse
101
+
102
+ # 国内镜像
103
+ pip install -i https://pypi.tuna.tsinghua.edu.cn/simple ErisPulse
104
+
105
+ # 使用 `uv` 安装
106
+ uv install ErisPulse
107
+ ```
108
+ > 如果您的 Python 版本低于 3.10,可以使用一键安装脚本自动配置环境。详见 [安装脚本说明](scripts/install/)。
109
+
110
+ ### 初始化项目
111
+
112
+ ```bash
113
+ # 交互式初始化
114
+ epsdk init
115
+
116
+ # 快速初始化(指定项目名称)
117
+ epsdk init -q -n my_bot
118
+ ```
119
+
120
+ ### 创建第一个机器人
121
+
122
+ 创建 `main.py` 文件:
123
+
124
+ <table>
125
+ <tr>
126
+ <td width="50%" valign="top">
127
+
128
+ **命令处理器**
129
+
130
+ ```python
131
+ from ErisPulse import sdk
132
+ from ErisPulse.Core.Event import command
133
+
134
+ @command("hello", help="发送问候消息")
135
+ async def hello_handler(event):
136
+ user_name = event.get_user_nickname() or "朋友"
137
+ await event.reply(f"你好,{user_name}!")
138
+
139
+ @command("ping", help="测试机器人是否在线")
140
+ async def ping_handler(event):
141
+ await event.reply("Pong!机器人运行正常。")
142
+
143
+ if __name__ == "__main__":
144
+ import asyncio
145
+ asyncio.run(sdk.run(keep_running=True))
146
+ ```
147
+
148
+ </td>
149
+ <td width="50%" valign="top">
150
+
151
+ **效果说明**
152
+
153
+ 发送 `/hello`
154
+
155
+ 机器人回复:`你好,{用户名}!`
156
+
157
+ ---
158
+
159
+ 发送 `/ping`
160
+
161
+ 机器人回复:`Pong!机器人运行正常。`
162
+
163
+ ---
164
+
165
+ **运行方式**
166
+
167
+ ```bash
168
+ epsdk run main.py
169
+ # 或开发模式
170
+ epsdk run main.py --reload
171
+ ```
172
+
173
+ </td>
174
+ </tr>
175
+ </table>
176
+
177
+ 更多详细说明请参阅:
178
+ - [快速开始指南](docs/quick-start.md)
179
+ - [入门指南](docs/getting-started/)
180
+
181
+ ## 应用场景
182
+
183
+ - **多平台机器人** - 在多个平台部署相同功能的机器人
184
+ - **聊天助手** - 接入 AI 聊天模块,实现娱乐和交互
185
+ - **自动化工具** - 消息通知、任务管理、数据收集
186
+ - **消息转发** - 跨平台消息同步和转发
187
+
188
+ ## 支持的适配器
189
+
190
+ 欢迎您贡献适配器!
191
+
192
+ - [云湖](https://github.com/ErisPulse/ErisPulse-YunhuAdapter) - 企业级即时通讯平台(机器人账户)
193
+ - [云湖用户](https://github.com/wsu2059q/ErisPulse-YunhuUserAdapter) - 基于云湖用户账户的适配器
194
+ - [Telegram](https://github.com/ErisPulse/ErisPulse-TelegramAdapter) - 全球性即时通讯软件
195
+ - [OneBot11](https://github.com/ErisPulse/ErisPulse-OneBot11Adapter) - 通用机器人接口标准
196
+ - [OneBot12](https://github.com/ErisPulse/ErisPulse-OneBot12Adapter) - OneBot12 标准
197
+ - [邮件](https://github.com/ErisPulse/ErisPulse-EmailAdapter) - 邮件收发处理
198
+ - [沙箱](https://github.com/ErisPulse/ErisPulse-SandboxAdapter) - 网页调试界面,无需接入实际平台
199
+
200
+ 查看 [适配器详情介绍](docs/platform-guide/README.md)
201
+
202
+ ## 文档资源
203
+
204
+ | 平台 | 主站点 | 备用站点 |
205
+ |------|--------|---------|
206
+ | 文档 | [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) |
207
+ | 模块市场 | [erisdev.com](https://www.erisdev.com/#market) | [Cloudflare](https://erispulse.pages.dev/#market) • [GitHub](https://erispulse.github.io/#market) • [Netlify](https://erispulse.netlify.app/#market) |
208
+
209
+ ## 贡献指南
210
+
211
+ 我们欢迎各种形式的贡献,包括但不限于:
212
+
213
+ 1. **报告问题**
214
+ 在 [GitHub Issues](https://github.com/ErisPulse/ErisPulse/issues) 提交 bug 报告
215
+
216
+ 2. **功能请求**
217
+ 通过 [社区讨论](https://github.com/ErisPulse/ErisPulse/discussions) 提出新想法
218
+
219
+ 3. **代码贡献**
220
+ 提交 Pull Request 前请阅读我们的 [代码风格](docs/styleguide/) 以及 [贡献指南](CONTRIBUTING.md)
221
+
222
+ 4. **文档改进**
223
+ 帮助完善文档和示例代码
224
+
225
+ [加入社区讨论](https://github.com/ErisPulse/ErisPulse/discussions)
226
+
227
+ ---
228
+
229
+ ## 致谢
230
+
231
+ - 本项目部分代码基于 [sdkFrame](https://github.com/runoneall/sdkFrame)
232
+ - 核心适配器标准化层基于 [OneBot12 规范](https://12.onebot.dev/)
233
+ - 感谢所有为开源社区做出贡献的开发者和作者
@@ -0,0 +1,173 @@
1
+ <table>
2
+ <tr>
3
+ <td width="35%" valign="middle" align="center">
4
+ <img src=".github/assets/erispulse_logo_1024.png" width="280" alt="ErisPulse" />
5
+ </td>
6
+ <td width="65%" valign="middle">
7
+
8
+ # ErisPulse
9
+
10
+ **事件驱动的多平台机器人开发框架**
11
+
12
+ [![PyPI](https://img.shields.io/pypi/v/ErisPulse?style=flat-square)](https://pypi.org/project/ErisPulse/)
13
+ [![Python Versions](https://img.shields.io/pypi/pyversions/ErisPulse?style=flat-square)](https://pypi.org/project/ErisPulse/)
14
+ [![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)
15
+ [![Socket Badge](https://socket.dev/api/badge/pypi/package/ErisPulse/latest)](https://socket.dev/pypi/package/ErisPulse)
16
+
17
+ </td>
18
+ </tr>
19
+ </table>
20
+
21
+ ---
22
+
23
+ ## 简介
24
+
25
+ ErisPulse 是一个基于 Python 的事件驱动型多平台机器人开发框架。通过统一的 OneBot12 标准接口,您可以一次编写代码,同时在云湖、Telegram、OneBot 等多个平台部署相同功能的机器人。框架提供灵活的模块(`插件`)系统、热重载支持和完整的开发者工具链,适用于从简单聊天机器人到复杂自动化系统的各种场景。
26
+
27
+ ## 核心特性
28
+
29
+ - **事件驱动架构** - 基于 OneBot12 标准的清晰事件模型
30
+ - **跨平台兼容** - 插件模块编写一次即可在所有平台使用
31
+ - **模块化设计** - 灵活的插件系统,易于扩展和集成
32
+ - **热重载支持** - 开发时无需重启即可重新加载代码
33
+ - **完整工具链** - 提供 CLI 工具、包管理和自动化脚本
34
+
35
+ ## 快速开始
36
+
37
+ ### 安装
38
+
39
+ ```bash
40
+ pip install ErisPulse
41
+
42
+ # 国内镜像
43
+ pip install -i https://pypi.tuna.tsinghua.edu.cn/simple ErisPulse
44
+
45
+ # 使用 `uv` 安装
46
+ uv install ErisPulse
47
+ ```
48
+ > 如果您的 Python 版本低于 3.10,可以使用一键安装脚本自动配置环境。详见 [安装脚本说明](scripts/install/)。
49
+
50
+ ### 初始化项目
51
+
52
+ ```bash
53
+ # 交互式初始化
54
+ epsdk init
55
+
56
+ # 快速初始化(指定项目名称)
57
+ epsdk init -q -n my_bot
58
+ ```
59
+
60
+ ### 创建第一个机器人
61
+
62
+ 创建 `main.py` 文件:
63
+
64
+ <table>
65
+ <tr>
66
+ <td width="50%" valign="top">
67
+
68
+ **命令处理器**
69
+
70
+ ```python
71
+ from ErisPulse import sdk
72
+ from ErisPulse.Core.Event import command
73
+
74
+ @command("hello", help="发送问候消息")
75
+ async def hello_handler(event):
76
+ user_name = event.get_user_nickname() or "朋友"
77
+ await event.reply(f"你好,{user_name}!")
78
+
79
+ @command("ping", help="测试机器人是否在线")
80
+ async def ping_handler(event):
81
+ await event.reply("Pong!机器人运行正常。")
82
+
83
+ if __name__ == "__main__":
84
+ import asyncio
85
+ asyncio.run(sdk.run(keep_running=True))
86
+ ```
87
+
88
+ </td>
89
+ <td width="50%" valign="top">
90
+
91
+ **效果说明**
92
+
93
+ 发送 `/hello`
94
+
95
+ 机器人回复:`你好,{用户名}!`
96
+
97
+ ---
98
+
99
+ 发送 `/ping`
100
+
101
+ 机器人回复:`Pong!机器人运行正常。`
102
+
103
+ ---
104
+
105
+ **运行方式**
106
+
107
+ ```bash
108
+ epsdk run main.py
109
+ # 或开发模式
110
+ epsdk run main.py --reload
111
+ ```
112
+
113
+ </td>
114
+ </tr>
115
+ </table>
116
+
117
+ 更多详细说明请参阅:
118
+ - [快速开始指南](docs/quick-start.md)
119
+ - [入门指南](docs/getting-started/)
120
+
121
+ ## 应用场景
122
+
123
+ - **多平台机器人** - 在多个平台部署相同功能的机器人
124
+ - **聊天助手** - 接入 AI 聊天模块,实现娱乐和交互
125
+ - **自动化工具** - 消息通知、任务管理、数据收集
126
+ - **消息转发** - 跨平台消息同步和转发
127
+
128
+ ## 支持的适配器
129
+
130
+ 欢迎您贡献适配器!
131
+
132
+ - [云湖](https://github.com/ErisPulse/ErisPulse-YunhuAdapter) - 企业级即时通讯平台(机器人账户)
133
+ - [云湖用户](https://github.com/wsu2059q/ErisPulse-YunhuUserAdapter) - 基于云湖用户账户的适配器
134
+ - [Telegram](https://github.com/ErisPulse/ErisPulse-TelegramAdapter) - 全球性即时通讯软件
135
+ - [OneBot11](https://github.com/ErisPulse/ErisPulse-OneBot11Adapter) - 通用机器人接口标准
136
+ - [OneBot12](https://github.com/ErisPulse/ErisPulse-OneBot12Adapter) - OneBot12 标准
137
+ - [邮件](https://github.com/ErisPulse/ErisPulse-EmailAdapter) - 邮件收发处理
138
+ - [沙箱](https://github.com/ErisPulse/ErisPulse-SandboxAdapter) - 网页调试界面,无需接入实际平台
139
+
140
+ 查看 [适配器详情介绍](docs/platform-guide/README.md)
141
+
142
+ ## 文档资源
143
+
144
+ | 平台 | 主站点 | 备用站点 |
145
+ |------|--------|---------|
146
+ | 文档 | [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) |
147
+ | 模块市场 | [erisdev.com](https://www.erisdev.com/#market) | [Cloudflare](https://erispulse.pages.dev/#market) • [GitHub](https://erispulse.github.io/#market) • [Netlify](https://erispulse.netlify.app/#market) |
148
+
149
+ ## 贡献指南
150
+
151
+ 我们欢迎各种形式的贡献,包括但不限于:
152
+
153
+ 1. **报告问题**
154
+ 在 [GitHub Issues](https://github.com/ErisPulse/ErisPulse/issues) 提交 bug 报告
155
+
156
+ 2. **功能请求**
157
+ 通过 [社区讨论](https://github.com/ErisPulse/ErisPulse/discussions) 提出新想法
158
+
159
+ 3. **代码贡献**
160
+ 提交 Pull Request 前请阅读我们的 [代码风格](docs/styleguide/) 以及 [贡献指南](CONTRIBUTING.md)
161
+
162
+ 4. **文档改进**
163
+ 帮助完善文档和示例代码
164
+
165
+ [加入社区讨论](https://github.com/ErisPulse/ErisPulse/discussions)
166
+
167
+ ---
168
+
169
+ ## 致谢
170
+
171
+ - 本项目部分代码基于 [sdkFrame](https://github.com/runoneall/sdkFrame)
172
+ - 核心适配器标准化层基于 [OneBot12 规范](https://12.onebot.dev/)
173
+ - 感谢所有为开源社区做出贡献的开发者和作者
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "ErisPulse"
7
- version = "2.3.5-dev.1"
7
+ version = "2.3.6-dev.1"
8
8
  description = "ErisPulse 是一个模块化、可扩展的异步 Python SDK 框架,主要用于构建高效、可维护的机器人应用程序。"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -14,8 +14,25 @@ authors = [
14
14
  { name = "艾莉丝·格雷拉特(WSu2059)", email = "wsu2059@qq.com" }
15
15
  ]
16
16
 
17
+ maintainers = [
18
+ { name = "艾莉丝·格雷拉特(WSu2059)", email = "wsu2059@qq.com" }
19
+ ]
20
+
21
+ keywords = [
22
+ "async",
23
+ "bot",
24
+ "sdk",
25
+ "framework",
26
+ "robot",
27
+ "onebot",
28
+ "telegram",
29
+ "extensible",
30
+ "modular",
31
+ "asyncio"
32
+ ]
33
+
17
34
  classifiers = [
18
- "Development Status :: 5 - Production/Stable",
35
+ "Development Status :: 4 - Beta",
19
36
  "Intended Audience :: Developers",
20
37
  "License :: OSI Approved :: MIT License",
21
38
  "Programming Language :: Python :: 3",
@@ -25,23 +42,32 @@ classifiers = [
25
42
  "Programming Language :: Python :: 3.13",
26
43
  "Programming Language :: Python :: 3 :: Only",
27
44
  "Operating System :: OS Independent",
28
- "Topic :: Software Development :: Libraries :: Python Modules"
45
+ "Topic :: Software Development :: Libraries :: Python Modules",
46
+ "Topic :: Software Development :: Libraries :: Application Frameworks",
47
+ "Framework :: AsyncIO",
48
+ "Typing :: Typed"
29
49
  ]
30
50
 
31
51
  dependencies = [
32
- "pip", # 显式声明,防止部分情况下cli报错
33
- "rich",
34
- "colorama",
35
- "aiohttp",
36
- "watchdog",
37
- "toml",
52
+ "pip>=23.0", # 显式声明,防止部分情况下cli报错 | 绝对!!!不要删除这个依赖项
53
+ "rich>=13.0.0",
54
+ "aiohttp>=3.9.0",
55
+ "watchdog>=4.0.0",
56
+ "toml>=0.10.2",
38
57
  "fastapi>=0.116.1",
39
58
  "hypercorn>=0.14.0",
40
- "pydantic>=2.10.6",
41
- "python-multipart>=0.0.20",
42
59
  "packaging>=25.0",
43
60
  ]
44
61
 
62
+ [project.optional-dependencies]
63
+ test = [
64
+ "pytest>=7.0.0",
65
+ "pytest-cov>=4.0.0",
66
+ "pytest-asyncio>=0.21.0",
67
+ "pytest-xdist>=3.0.0",
68
+ "pytest-mock>=3.10.0",
69
+ ]
70
+
45
71
  [project.scripts]
46
72
  ep-init = "ErisPulse.__init__:init_sync"
47
73
  epsdk = "ErisPulse.__main__:main"
@@ -3,11 +3,6 @@ from rich.console import Console
3
3
  from rich.theme import Theme
4
4
  from rich.highlighter import RegexHighlighter
5
5
 
6
- # 确保在Windows上启用颜色
7
- if sys.platform == "win32":
8
- from colorama import init
9
- init()
10
-
11
6
  class CommandHighlighter(RegexHighlighter):
12
7
  """
13
8
  高亮CLI命令和参数
@@ -1,7 +1,7 @@
1
1
  """
2
2
  ErisPulse 基础模块
3
3
 
4
- 提供核心基类定义,包括适配器和模块基类
4
+ 提供平台适配器以及模块的基类
5
5
  """
6
6
 
7
7
  from .adapter import SendDSL, BaseAdapter
@@ -7,7 +7,7 @@
7
7
  """
8
8
  ErisPulse 基础模块
9
9
 
10
- 提供核心基类定义,包括适配器和模块基类
10
+ 提供平台适配器以及模块的基类
11
11
  """
12
12
 
13
13
  from .adapter import SendDSL, BaseAdapter
@@ -41,7 +41,33 @@ class SendDSL:
41
41
  self._target_id = target_id
42
42
  self._target_to = target_id
43
43
  self._account_id = account_id
44
-
44
+
45
+ def At(self, **kwargs):
46
+ from .. import logger
47
+ logger.debug(f"未实现At方法; At: {kwargs}")
48
+ logger.error(f"注意:该平台{self._adapter.__class__.__name__}未实现At方法,该修饰方法将被忽略")
49
+ return self.__class__(self._adapter, self._target_type, self._target_id, self._account_id)
50
+ def Reply(self, **kwargs):
51
+ from .. import logger
52
+ logger.debug(f"未实现Reply方法; Reply: {kwargs}")
53
+ logger.error(f"注意:该平台{self._adapter.__class__.__name__}未实现Reply方法,该修饰方法将被忽略")
54
+ return self.__class__(self._adapter, self._target_type, self._target_id, self._account_id)
55
+ def AtAll(self, **kwargs):
56
+ from .. import logger
57
+ logger.debug(f"未实现AtAll方法; AtAll: {kwargs}")
58
+ logger.error(f"注意:该平台{self._adapter.__class__.__name__}未实现AtAll方法,该修饰方法将被忽略")
59
+ return self.__class__(self._adapter, self._target_type, self._target_id, self._account_id)
60
+ def Raw_ob12(self, **kwargs):
61
+ from .. import logger
62
+ logger.debug(f"未实现Raw_ob12方法; Raw_ob12: {kwargs}")
63
+ logger.error(f"注意:该平台{self._adapter.__class__.__name__}未实现Raw_ob12方法,该修饰方法将被忽略")
64
+ return self.__class__(self._adapter, self._target_type, self._target_id, self._account_id)
65
+ def Raw_json(self, **kwargs):
66
+ from .. import logger
67
+ logger.debug(f"未实现Raw_json方法; Raw_json: {kwargs}")
68
+ logger.error(f"注意:该平台{self._adapter.__class__.__name__}未实现Raw_json方法,该修饰方法将被忽略")
69
+ return self.__class__(self._adapter, self._target_type, self._target_id, self._account_id)
70
+
45
71
  def To(self, target_type: str = None, target_id: Union[str, int] = None) -> 'SendDSL':
46
72
  """
47
73
  设置消息目标
@@ -39,6 +39,16 @@ class SendDSL:
39
39
  :param _account_id: 发送账号(可选)
40
40
  """
41
41
  ...
42
+ def At(self: object, **kwargs: ...) -> ...:
43
+ ...
44
+ def Reply(self: object, **kwargs: ...) -> ...:
45
+ ...
46
+ def AtAll(self: object, **kwargs: ...) -> ...:
47
+ ...
48
+ def Raw_ob12(self: object, **kwargs: ...) -> ...:
49
+ ...
50
+ def Raw_json(self: object, **kwargs: ...) -> ...:
51
+ ...
42
52
  def To(self: object, target_type: str = ..., target_id: Union[(str, int)] = ...) -> SendDSL:
43
53
  """
44
54
  设置消息目标
@@ -10,7 +10,7 @@ ErisPulse 事件处理基础模块
10
10
  """
11
11
 
12
12
  from .. import adapter, logger
13
- from ..._bootstrap import get_event_config
13
+ from ...runtime import get_event_config
14
14
  from typing import Callable, Any, Dict, List
15
15
  import asyncio
16
16
  from .wrapper import Event
@@ -16,7 +16,7 @@ ErisPulse 事件处理基础模块
16
16
  """
17
17
 
18
18
  from .. import adapter, logger
19
- from ..._bootstrap import get_event_config
19
+ from ...runtime import get_event_config
20
20
  from typing import Callable, Any, Dict, List
21
21
  import asyncio
22
22
  from .wrapper import Event
@@ -13,7 +13,7 @@ ErisPulse 命令处理模块
13
13
 
14
14
  from .base import BaseEventHandler
15
15
  from .. import adapter, logger
16
- from ..._bootstrap import get_event_config
16
+ from ...runtime import get_event_config
17
17
  from typing import Callable, Union, List, Dict, Any, Optional, Awaitable
18
18
  import asyncio
19
19
 
@@ -19,7 +19,7 @@ ErisPulse 命令处理模块
19
19
 
20
20
  from .base import BaseEventHandler
21
21
  from .. import adapter, logger
22
- from ..._bootstrap import get_event_config
22
+ from ...runtime import get_event_config
23
23
  from typing import Callable, Union, List, Dict, Any, Optional, Awaitable
24
24
  import asyncio
25
25