ErisPulse 2.4.6.dev5__tar.gz → 2.4.6.dev6__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 (145) hide show
  1. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/.gitignore +7 -0
  2. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/PKG-INFO +94 -3
  3. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/README.md +92 -1
  4. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/pyproject.toml +12 -2
  5. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/CLI/commands/create.py +227 -101
  6. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/CLI/commands/create.pyi +1 -0
  7. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/CLI/commands/install.py +0 -1
  8. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/CLI/utils/package_manager.py +43 -29
  9. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/CLI/utils/package_manager.pyi +5 -0
  10. erispulse-2.4.6.dev6/src/ErisPulse/Core/Bases/__init__.py +44 -0
  11. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/Core/Bases/__init__.pyi +4 -2
  12. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/Core/Bases/adapter.py +312 -3
  13. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/Core/Bases/adapter.pyi +136 -1
  14. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/Core/Bases/client.py +109 -5
  15. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/Core/Bases/client.pyi +84 -5
  16. erispulse-2.4.6.dev6/src/ErisPulse/Core/Bases/errors.py +130 -0
  17. erispulse-2.4.6.dev6/src/ErisPulse/Core/Bases/errors.pyi +118 -0
  18. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/Core/Bases/router.py +115 -109
  19. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/Core/Bases/router.pyi +70 -77
  20. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/Core/Bases/storage.py +8 -8
  21. erispulse-2.4.6.dev6/src/ErisPulse/Core/Bases/websocket.py +265 -0
  22. erispulse-2.4.6.dev6/src/ErisPulse/Core/Bases/websocket.pyi +194 -0
  23. erispulse-2.4.6.dev6/src/ErisPulse/Core/__init__.py +86 -0
  24. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/Core/__init__.pyi +4 -3
  25. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/Core/adapter.py +103 -25
  26. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/Core/adapter.pyi +36 -0
  27. erispulse-2.4.6.dev6/src/ErisPulse/Core/client.py +785 -0
  28. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/Core/client.pyi +147 -30
  29. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/Core/constants.py +68 -19
  30. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/Core/router.py +697 -94
  31. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/Core/router.pyi +163 -6
  32. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/Core/storage.py +124 -1
  33. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/Core/storage.pyi +3 -0
  34. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/loaders/adapter.py +16 -7
  35. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/loaders/module.py +104 -10
  36. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/loaders/module.pyi +1 -0
  37. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/loaders/strategy.py +1 -1
  38. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/runtime/__init__.py +18 -0
  39. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/runtime/__init__.pyi +1 -0
  40. erispulse-2.4.6.dev6/src/ErisPulse/runtime/config_schema.py +320 -0
  41. erispulse-2.4.6.dev6/src/ErisPulse/runtime/config_schema.pyi +128 -0
  42. erispulse-2.4.6.dev5/src/ErisPulse/Core/Bases/__init__.py +0 -25
  43. erispulse-2.4.6.dev5/src/ErisPulse/Core/__init__.py +0 -61
  44. erispulse-2.4.6.dev5/src/ErisPulse/Core/client.py +0 -478
  45. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/LICENSE +0 -0
  46. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/CLI/__init__.py +0 -0
  47. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/CLI/__init__.pyi +0 -0
  48. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/CLI/base.py +0 -0
  49. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/CLI/base.pyi +0 -0
  50. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/CLI/cli.py +0 -0
  51. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/CLI/cli.pyi +0 -0
  52. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/CLI/commands/__init__.py +0 -0
  53. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/CLI/commands/__init__.pyi +0 -0
  54. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/CLI/commands/init.py +0 -0
  55. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/CLI/commands/init.pyi +0 -0
  56. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/CLI/commands/install.pyi +0 -0
  57. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/CLI/commands/list.py +0 -0
  58. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/CLI/commands/list.pyi +0 -0
  59. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/CLI/commands/list_remote.py +0 -0
  60. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/CLI/commands/list_remote.pyi +0 -0
  61. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/CLI/commands/run.py +0 -0
  62. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/CLI/commands/run.pyi +0 -0
  63. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/CLI/commands/self_update.py +0 -0
  64. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/CLI/commands/self_update.pyi +0 -0
  65. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/CLI/commands/uninstall.py +0 -0
  66. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/CLI/commands/uninstall.pyi +0 -0
  67. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/CLI/commands/upgrade.py +0 -0
  68. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/CLI/commands/upgrade.pyi +0 -0
  69. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/CLI/console.py +0 -0
  70. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/CLI/console.pyi +0 -0
  71. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/CLI/registry.py +0 -0
  72. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/CLI/registry.pyi +0 -0
  73. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/CLI/utils/__init__.py +0 -0
  74. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/CLI/utils/__init__.pyi +0 -0
  75. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/CLI/utils/display.py +0 -0
  76. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/CLI/utils/display.pyi +0 -0
  77. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/Core/Bases/manager.py +0 -0
  78. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/Core/Bases/manager.pyi +0 -0
  79. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/Core/Bases/module.py +0 -0
  80. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/Core/Bases/module.pyi +0 -0
  81. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/Core/Bases/storage.pyi +0 -0
  82. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/Core/Event/__init__.py +0 -0
  83. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/Core/Event/__init__.pyi +0 -0
  84. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/Core/Event/base.py +0 -0
  85. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/Core/Event/base.pyi +0 -0
  86. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/Core/Event/command.py +0 -0
  87. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/Core/Event/command.pyi +0 -0
  88. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/Core/Event/message.py +0 -0
  89. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/Core/Event/message.pyi +0 -0
  90. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/Core/Event/message_builder.py +0 -0
  91. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/Core/Event/message_builder.pyi +0 -0
  92. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/Core/Event/meta.py +0 -0
  93. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/Core/Event/meta.pyi +0 -0
  94. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/Core/Event/notice.py +0 -0
  95. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/Core/Event/notice.pyi +0 -0
  96. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/Core/Event/request.py +0 -0
  97. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/Core/Event/request.pyi +0 -0
  98. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/Core/Event/session_type.py +0 -0
  99. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/Core/Event/session_type.pyi +0 -0
  100. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/Core/Event/wrapper.py +0 -0
  101. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/Core/Event/wrapper.pyi +0 -0
  102. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/Core/config.py +0 -0
  103. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/Core/config.pyi +0 -0
  104. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/Core/constants.pyi +0 -0
  105. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/Core/lifecycle.py +0 -0
  106. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/Core/lifecycle.pyi +0 -0
  107. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/Core/logger.py +0 -0
  108. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/Core/logger.pyi +0 -0
  109. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/Core/module.py +0 -0
  110. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/Core/module.pyi +0 -0
  111. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/__init__.py +0 -0
  112. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/__init__.pyi +0 -0
  113. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/__main__.py +0 -0
  114. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/__main__.pyi +0 -0
  115. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/finders/__init__.py +0 -0
  116. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/finders/__init__.pyi +0 -0
  117. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/finders/adapter.py +0 -0
  118. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/finders/adapter.pyi +0 -0
  119. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/finders/bases/__init__.py +0 -0
  120. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/finders/bases/__init__.pyi +0 -0
  121. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/finders/bases/finder.py +0 -0
  122. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/finders/bases/finder.pyi +0 -0
  123. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/finders/module.py +0 -0
  124. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/finders/module.pyi +0 -0
  125. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/loaders/__init__.py +0 -0
  126. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/loaders/__init__.pyi +0 -0
  127. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/loaders/adapter.pyi +0 -0
  128. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/loaders/bases/__init__.py +0 -0
  129. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/loaders/bases/__init__.pyi +0 -0
  130. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/loaders/bases/loader.py +0 -0
  131. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/loaders/bases/loader.pyi +0 -0
  132. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/loaders/strategy.pyi +0 -0
  133. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/runtime/context.py +0 -0
  134. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/runtime/context.pyi +0 -0
  135. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/runtime/exceptions.py +0 -0
  136. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/runtime/exceptions.pyi +0 -0
  137. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/runtime/frame_config.py +0 -0
  138. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/runtime/frame_config.pyi +0 -0
  139. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/sdk.py +0 -0
  140. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/sdk.pyi +0 -0
  141. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/web_status/4xx.png +0 -0
  142. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/web_status/5xx.png +0 -0
  143. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/web_status/__init__.py +0 -0
  144. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/web_status/__init__.pyi +0 -0
  145. {erispulse-2.4.6.dev5 → erispulse-2.4.6.dev6}/src/ErisPulse/web_status/unknow.png +0 -0
@@ -9,6 +9,13 @@ logs/
9
9
  config.db*
10
10
  .website
11
11
 
12
+ # 敏感配置和数据文件
13
+ config/config.toml
14
+ config/config.db
15
+ config/config.db-journal
16
+ config/config.db-wal
17
+ config/config.db-shm
18
+
12
19
  # Byte-compiled / optimized / DLL files
13
20
  __pycache__/
14
21
  *.py[cod]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ErisPulse
3
- Version: 2.4.6.dev5
3
+ Version: 2.4.6.dev6
4
4
  Summary: ErisPulse 是一个模块化、可扩展的异步 Python SDK 框架,主要用于构建高效、可维护的机器人应用程序。
5
5
  Author-email: ErisDev <erisdev@88.com>
6
6
  Maintainer-email: "艾莉丝·格雷拉特(WSu2059)" <wsu2059@qq.com>
@@ -26,7 +26,7 @@ License: MIT License
26
26
  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
27
27
  SOFTWARE.
28
28
  License-File: LICENSE
29
- Keywords: async,asyncio,bot,extensible,framework,modular,onebot,robot,sdk,telegram
29
+ Keywords: async,asyncio,bot,bot-framework,chatbot,email,extensible,framework,instant-messaging,kook,matrix,modular,multi-platform,onebot,onebot12,qq,robot,sdk,telegram,yunhu
30
30
  Classifier: Development Status :: 4 - Beta
31
31
  Classifier: Framework :: AsyncIO
32
32
  Classifier: Intended Audience :: Developers
@@ -79,7 +79,7 @@ Description-Content-Type: text/markdown
79
79
  </td>
80
80
  <td valign="middle">
81
81
 
82
- [English](README.en.md) | **简体中文** | [繁體中文](README.zh-TW.md)
82
+ [English](README.en.md) | **简体中文** | [繁體中文](README.zh-TW.md) | [日本語](README.ja.md) | [Русский](README.ru.md)
83
83
 
84
84
  # ErisPulse
85
85
 
@@ -292,6 +292,10 @@ pip install ErisPulse
292
292
 
293
293
  ##### 仪表盘:
294
294
 
295
+ [![在线演示](https://img.shields.io/badge/在线演示-Dashboard-FF6B9D?style=for-the-badge&logo=github&logoColor=white)](https://dashdemo.erisdev.com/)
296
+
297
+ > 💡 在线体验演示仪表盘:[DashDemo](https://dashdemo.erisdev.com/)
298
+
295
299
  <table>
296
300
  <tr>
297
301
  <td width="50%">
@@ -407,6 +411,93 @@ epsdk run main.py --reload
407
411
  - [快速开始指南](docs/zh-CN/quick-start.md)
408
412
  - [入门指南](docs/zh-CN/getting-started/)
409
413
 
414
+ #### 多轮对话示例
415
+
416
+ ErisPulse 内置了强大的多轮对话引擎,轻松实现引导式操作、信息收集等交互场景:
417
+
418
+ ```python
419
+ from ErisPulse.Core.Event import command, request
420
+
421
+ @command("register")
422
+ async def register_handler(event):
423
+ conv = event.conversation(timeout=60)
424
+
425
+ await conv.say("欢迎注册!")
426
+
427
+ # 多步骤收集用户信息,自动验证
428
+ data = await conv.collect([
429
+ {"key": "name", "prompt": "请输入姓名"},
430
+ {"key": "age", "prompt": "请输入年龄",
431
+ "validator": lambda e: e.get_text().strip().isdigit(),
432
+ "retry_prompt": "年龄必须是数字,请重新输入"},
433
+ ])
434
+
435
+ if data and await conv.confirm(f"确认注册?姓名: {data['name']}, 年龄: {data['age']}"):
436
+ # 通过 SendDSL 主动推送通知
437
+ await sdk.adapter.get(event.get_platform()).Send.To(
438
+ "user", event.get_user_id()
439
+ ).Text(f"注册成功!欢迎 {data['name']}")
440
+ # 或 await event.reply("注册成功!")
441
+
442
+ # 自动处理好友请求
443
+ @request.on_friend_request()
444
+ async def handle_friend_request(event):
445
+ user_name = event.get_user_nickname() or event.get_user_id()
446
+
447
+ # 同意请求
448
+ result = await event.approve()
449
+ if result.get("status") == "ok":
450
+ await event.reply(f"已自动通过好友请求,欢迎 {user_name}")
451
+ ```
452
+
453
+ <details>
454
+ <summary>查看更多 Conversation API(分支跳转 / 选择 / 持久化)</summary>
455
+
456
+ ```python
457
+ @command("quiz")
458
+ async def quiz_handler(event):
459
+ conv = event.conversation(timeout=30)
460
+
461
+ # 选项式问答
462
+ answer = await conv.choose("Python 的创造者是谁?", [
463
+ "Guido van Rossum",
464
+ "James Gosling",
465
+ "Dennis Ritchie",
466
+ ])
467
+
468
+ if answer == 0:
469
+ await conv.say("正确!")
470
+ elif answer is None:
471
+ await conv.say("超时了,下次再来吧!")
472
+ else:
473
+ await conv.say("错误了,正确答案是 Guido van Rossum")
474
+
475
+ @command("menu")
476
+ async def menu_handler(event):
477
+ conv = event.conversation(timeout=60)
478
+
479
+ # 分支跳转,构建复杂交互流程
480
+ @conv.branch("main")
481
+ async def main_menu():
482
+ await conv.say("=== 主菜单 ===\n1. 个人信息\n2. 设置\n3. 退出")
483
+ resp = await conv.wait()
484
+ if resp and resp.get_text().strip() == "1":
485
+ await conv.goto("profile")
486
+
487
+ @conv.branch("profile")
488
+ async def profile():
489
+ await conv.say("姓名: Alice\n0. 返回")
490
+ resp = await conv.wait()
491
+ if resp and resp.get_text().strip() == "0":
492
+ await conv.goto("main")
493
+
494
+ await conv.start()
495
+ ```
496
+
497
+ 详见 [Conversation 多轮对话](docs/zh-CN/advanced/conversation.md)
498
+
499
+ </details>
500
+
410
501
  ---
411
502
 
412
503
  ### 支持的适配器
@@ -7,7 +7,7 @@
7
7
  </td>
8
8
  <td valign="middle">
9
9
 
10
- [English](README.en.md) | **简体中文** | [繁體中文](README.zh-TW.md)
10
+ [English](README.en.md) | **简体中文** | [繁體中文](README.zh-TW.md) | [日本語](README.ja.md) | [Русский](README.ru.md)
11
11
 
12
12
  # ErisPulse
13
13
 
@@ -220,6 +220,10 @@ pip install ErisPulse
220
220
 
221
221
  ##### 仪表盘:
222
222
 
223
+ [![在线演示](https://img.shields.io/badge/在线演示-Dashboard-FF6B9D?style=for-the-badge&logo=github&logoColor=white)](https://dashdemo.erisdev.com/)
224
+
225
+ > 💡 在线体验演示仪表盘:[DashDemo](https://dashdemo.erisdev.com/)
226
+
223
227
  <table>
224
228
  <tr>
225
229
  <td width="50%">
@@ -335,6 +339,93 @@ epsdk run main.py --reload
335
339
  - [快速开始指南](docs/zh-CN/quick-start.md)
336
340
  - [入门指南](docs/zh-CN/getting-started/)
337
341
 
342
+ #### 多轮对话示例
343
+
344
+ ErisPulse 内置了强大的多轮对话引擎,轻松实现引导式操作、信息收集等交互场景:
345
+
346
+ ```python
347
+ from ErisPulse.Core.Event import command, request
348
+
349
+ @command("register")
350
+ async def register_handler(event):
351
+ conv = event.conversation(timeout=60)
352
+
353
+ await conv.say("欢迎注册!")
354
+
355
+ # 多步骤收集用户信息,自动验证
356
+ data = await conv.collect([
357
+ {"key": "name", "prompt": "请输入姓名"},
358
+ {"key": "age", "prompt": "请输入年龄",
359
+ "validator": lambda e: e.get_text().strip().isdigit(),
360
+ "retry_prompt": "年龄必须是数字,请重新输入"},
361
+ ])
362
+
363
+ if data and await conv.confirm(f"确认注册?姓名: {data['name']}, 年龄: {data['age']}"):
364
+ # 通过 SendDSL 主动推送通知
365
+ await sdk.adapter.get(event.get_platform()).Send.To(
366
+ "user", event.get_user_id()
367
+ ).Text(f"注册成功!欢迎 {data['name']}")
368
+ # 或 await event.reply("注册成功!")
369
+
370
+ # 自动处理好友请求
371
+ @request.on_friend_request()
372
+ async def handle_friend_request(event):
373
+ user_name = event.get_user_nickname() or event.get_user_id()
374
+
375
+ # 同意请求
376
+ result = await event.approve()
377
+ if result.get("status") == "ok":
378
+ await event.reply(f"已自动通过好友请求,欢迎 {user_name}")
379
+ ```
380
+
381
+ <details>
382
+ <summary>查看更多 Conversation API(分支跳转 / 选择 / 持久化)</summary>
383
+
384
+ ```python
385
+ @command("quiz")
386
+ async def quiz_handler(event):
387
+ conv = event.conversation(timeout=30)
388
+
389
+ # 选项式问答
390
+ answer = await conv.choose("Python 的创造者是谁?", [
391
+ "Guido van Rossum",
392
+ "James Gosling",
393
+ "Dennis Ritchie",
394
+ ])
395
+
396
+ if answer == 0:
397
+ await conv.say("正确!")
398
+ elif answer is None:
399
+ await conv.say("超时了,下次再来吧!")
400
+ else:
401
+ await conv.say("错误了,正确答案是 Guido van Rossum")
402
+
403
+ @command("menu")
404
+ async def menu_handler(event):
405
+ conv = event.conversation(timeout=60)
406
+
407
+ # 分支跳转,构建复杂交互流程
408
+ @conv.branch("main")
409
+ async def main_menu():
410
+ await conv.say("=== 主菜单 ===\n1. 个人信息\n2. 设置\n3. 退出")
411
+ resp = await conv.wait()
412
+ if resp and resp.get_text().strip() == "1":
413
+ await conv.goto("profile")
414
+
415
+ @conv.branch("profile")
416
+ async def profile():
417
+ await conv.say("姓名: Alice\n0. 返回")
418
+ resp = await conv.wait()
419
+ if resp and resp.get_text().strip() == "0":
420
+ await conv.goto("main")
421
+
422
+ await conv.start()
423
+ ```
424
+
425
+ 详见 [Conversation 多轮对话](docs/zh-CN/advanced/conversation.md)
426
+
427
+ </details>
428
+
338
429
  ---
339
430
 
340
431
  ### 支持的适配器
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "ErisPulse"
7
- version = "2.4.6-dev.5"
7
+ version = "2.4.6-dev.6"
8
8
  description = "ErisPulse 是一个模块化、可扩展的异步 Python SDK 框架,主要用于构建高效、可维护的机器人应用程序。"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -24,11 +24,21 @@ keywords = [
24
24
  "sdk",
25
25
  "framework",
26
26
  "robot",
27
+ "chatbot",
28
+ "bot-framework",
27
29
  "onebot",
30
+ "onebot12",
28
31
  "telegram",
32
+ "qq",
33
+ "multi-platform",
29
34
  "extensible",
30
35
  "modular",
31
- "asyncio"
36
+ "asyncio",
37
+ "instant-messaging",
38
+ "kook",
39
+ "yunhu",
40
+ "matrix",
41
+ "email",
32
42
  ]
33
43
 
34
44
  classifiers = [