ErisPulse 1.2.2__tar.gz → 1.2.3__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-1.2.2 → erispulse-1.2.3}/.github/tools/update-api-docs.py +1 -1
- {erispulse-1.2.2 → erispulse-1.2.3}/LICENSE +7 -0
- {erispulse-1.2.2 → erispulse-1.2.3}/PKG-INFO +9 -1
- {erispulse-1.2.2 → erispulse-1.2.3}/docs/ADAPTERS.md +229 -16
- {erispulse-1.2.2 → erispulse-1.2.3}/docs/CHANGELOG.md +14 -3
- {erispulse-1.2.2 → erispulse-1.2.3}/docs/CLI.md +2 -21
- {erispulse-1.2.2 → erispulse-1.2.3}/docs/DEVELOPMENT.md +12 -14
- {erispulse-1.2.2 → erispulse-1.2.3}/docs/ForAIDocs/ErisPulseDevelop.md +244 -304
- {erispulse-1.2.2 → erispulse-1.2.3}/docs/ORIGIN.md +2 -2
- {erispulse-1.2.2 → erispulse-1.2.3}/docs/REFERENCE.md +1 -253
- erispulse-1.2.3/docs/quick-start.md +88 -0
- {erispulse-1.2.2 → erispulse-1.2.3}/pyproject.toml +3 -2
- {erispulse-1.2.2 → erispulse-1.2.3}/src/ErisPulse/__main__.py +15 -0
- erispulse-1.2.2/docs/quick-start.md +0 -152
- {erispulse-1.2.2 → erispulse-1.2.3}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {erispulse-1.2.2 → erispulse-1.2.3}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {erispulse-1.2.2 → erispulse-1.2.3}/.github/assets/erispulse_logo.png +0 -0
- {erispulse-1.2.2 → erispulse-1.2.3}/.github/config/notify.json +0 -0
- {erispulse-1.2.2 → erispulse-1.2.3}/.github/tools/merge_md.py +0 -0
- {erispulse-1.2.2 → erispulse-1.2.3}/.github/workflows/notifications.yml +0 -0
- {erispulse-1.2.2 → erispulse-1.2.3}/.github/workflows/pypi-publish.yml +0 -0
- {erispulse-1.2.2 → erispulse-1.2.3}/.github/workflows/send-email/action.yml +0 -0
- {erispulse-1.2.2 → erispulse-1.2.3}/.github/workflows/send-email/send_mail.py +0 -0
- {erispulse-1.2.2 → erispulse-1.2.3}/.github/workflows/send-email/send_mail_old.py +0 -0
- {erispulse-1.2.2 → erispulse-1.2.3}/.gitignore +0 -0
- {erispulse-1.2.2 → erispulse-1.2.3}/.python-version +0 -0
- {erispulse-1.2.2 → erispulse-1.2.3}/README.md +0 -0
- {erispulse-1.2.2 → erispulse-1.2.3}/devs/test.py +0 -0
- {erispulse-1.2.2 → erispulse-1.2.3}/devs/test_adapter.py +0 -0
- {erispulse-1.2.2 → erispulse-1.2.3}/devs/test_files/test.docx +0 -0
- {erispulse-1.2.2 → erispulse-1.2.3}/devs/test_files/test.jpg +0 -0
- {erispulse-1.2.2 → erispulse-1.2.3}/devs/test_files/test.mp4 +0 -0
- {erispulse-1.2.2 → erispulse-1.2.3}/docs/AI-Module-Generation.md +0 -0
- {erispulse-1.2.2 → erispulse-1.2.3}/gitc/cd_branch.sh +0 -0
- {erispulse-1.2.2 → erispulse-1.2.3}/gitc/commit.sh +0 -0
- {erispulse-1.2.2 → erispulse-1.2.3}/gitc/create_branch.sh +0 -0
- {erispulse-1.2.2 → erispulse-1.2.3}/gitc/create_pr.sh +0 -0
- {erispulse-1.2.2 → erispulse-1.2.3}/gitc/merge_dev.sh +0 -0
- {erispulse-1.2.2 → erispulse-1.2.3}/gitc/usage.md +0 -0
- {erispulse-1.2.2 → erispulse-1.2.3}/src/ErisPulse/__init__.py +0 -0
- {erispulse-1.2.2 → erispulse-1.2.3}/src/ErisPulse/adapter.py +0 -0
- {erispulse-1.2.2 → erispulse-1.2.3}/src/ErisPulse/db.py +0 -0
- {erispulse-1.2.2 → erispulse-1.2.3}/src/ErisPulse/logger.py +0 -0
- {erispulse-1.2.2 → erispulse-1.2.3}/src/ErisPulse/mods.py +0 -0
- {erispulse-1.2.2 → erispulse-1.2.3}/src/ErisPulse/raiserr.py +0 -0
- {erispulse-1.2.2 → erispulse-1.2.3}/src/ErisPulse/util.py +0 -0
|
@@ -60,7 +60,7 @@ def main():
|
|
|
60
60
|
module_dir = Path('src/ErisPulse')
|
|
61
61
|
reference_path = Path('docs/REFERENCE.md')
|
|
62
62
|
|
|
63
|
-
modules = ['__init__', '__main__', 'adapter', 'db', 'logger', '
|
|
63
|
+
modules = ['__init__', '__main__', 'adapter', 'db', 'logger', 'raiserr', 'util']
|
|
64
64
|
|
|
65
65
|
for module in modules:
|
|
66
66
|
py_file = module_dir / f'{module}.py'
|
|
@@ -2,6 +2,9 @@ MIT License
|
|
|
2
2
|
|
|
3
3
|
Copyright (c) 2025 ErisPulse
|
|
4
4
|
|
|
5
|
+
Portions of this software are based on https://github.com/FramerOrg/Framer
|
|
6
|
+
(Copyright (c) 2025 runoneall).
|
|
7
|
+
|
|
5
8
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
9
|
of this software and associated documentation files (the "Software"), to deal
|
|
7
10
|
in the Software without restriction, including without limitation the rights
|
|
@@ -19,3 +22,7 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
|
19
22
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
23
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
24
|
SOFTWARE.
|
|
25
|
+
|
|
26
|
+
The documentation portion of this project references content from https://codeberg.org/ybr/yhwiki,
|
|
27
|
+
licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0
|
|
28
|
+
International License (CC BY-NC-ND 4.0).
|
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ErisPulse
|
|
3
|
-
Version: 1.2.
|
|
3
|
+
Version: 1.2.3
|
|
4
4
|
Summary: ErisPulse 是一个模块化、可扩展的异步 Python SDK 框架,主要用于构建高效、可维护的机器人应用程序。
|
|
5
5
|
Author-email: "艾莉丝·格雷拉特(WSu2059)" <wsu2059@qq.com>, runoneall <runoobsteve@gmail.com>
|
|
6
6
|
License: MIT License
|
|
7
7
|
|
|
8
8
|
Copyright (c) 2025 ErisPulse
|
|
9
9
|
|
|
10
|
+
Portions of this software are based on https://github.com/FramerOrg/Framer
|
|
11
|
+
(Copyright (c) 2025 runoneall).
|
|
12
|
+
|
|
10
13
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
11
14
|
of this software and associated documentation files (the "Software"), to deal
|
|
12
15
|
in the Software without restriction, including without limitation the rights
|
|
@@ -24,6 +27,10 @@ License: MIT License
|
|
|
24
27
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
25
28
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
26
29
|
SOFTWARE.
|
|
30
|
+
|
|
31
|
+
The documentation portion of this project references content from https://codeberg.org/ybr/yhwiki,
|
|
32
|
+
licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0
|
|
33
|
+
International License (CC BY-NC-ND 4.0).
|
|
27
34
|
License-File: LICENSE
|
|
28
35
|
Classifier: Development Status :: 5 - Production/Stable
|
|
29
36
|
Classifier: Intended Audience :: Developers
|
|
@@ -38,6 +45,7 @@ Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
|
38
45
|
Requires-Python: >=3.10
|
|
39
46
|
Requires-Dist: aiohttp
|
|
40
47
|
Requires-Dist: importlib>=1.0.4
|
|
48
|
+
Requires-Dist: pip
|
|
41
49
|
Requires-Dist: watchdog
|
|
42
50
|
Description-Content-Type: text/markdown
|
|
43
51
|
|
|
@@ -89,40 +89,253 @@ sdk.env.set("YunhuAdapter", {
|
|
|
89
89
|
> - 云湖需要在控制台指向我们开启的 `server` 地址,否则无法正常接收消息。
|
|
90
90
|
|
|
91
91
|
#### 数据格式示例
|
|
92
|
+
云湖目前有9种事件会推送给机器人:
|
|
93
|
+
|
|
94
|
+
|事件字段名称|事件用途|
|
|
95
|
+
|:---:|:---:|
|
|
96
|
+
|message.receive.normal|普通消息|
|
|
97
|
+
|message.receive.instruction|指令消息|
|
|
98
|
+
|group.join|用户加群|
|
|
99
|
+
|group.leave|用户退群|
|
|
100
|
+
|bot.followed|机器人关注|
|
|
101
|
+
|bot.unfollowed|机器人取关|
|
|
102
|
+
|bot.shortcut.menu|快捷菜单|
|
|
103
|
+
|button.report.inline|按钮汇报|
|
|
104
|
+
|bot.setting|机器人设置|
|
|
105
|
+
|
|
106
|
+
每个事件的触发条件以及数据结构如下:
|
|
107
|
+
|
|
108
|
+
##### 普通消息事件
|
|
109
|
+
当用户向机器人或机器人所在的群聊发送消息,且没有选择指令时,将会触发该事件。
|
|
110
|
+
```json
|
|
111
|
+
{
|
|
112
|
+
"version": "1.0",
|
|
113
|
+
"header":
|
|
114
|
+
"eventId": "c192ccc83d5147f2859ca77bcfafc9f9",
|
|
115
|
+
"eventType": "message.receive.normal",
|
|
116
|
+
"eventTime": 1748613099002
|
|
117
|
+
}
|
|
118
|
+
"event": {
|
|
119
|
+
"sender":
|
|
120
|
+
"senderId": "6300451",
|
|
121
|
+
"senderType": "user",
|
|
122
|
+
"senderUserLevel": "owner",
|
|
123
|
+
"senderNickname": "ShanFish"
|
|
124
|
+
},
|
|
125
|
+
"chat": {
|
|
126
|
+
"chatId": "49871624",
|
|
127
|
+
"chatType": "bot"
|
|
128
|
+
},
|
|
129
|
+
"message": {
|
|
130
|
+
"msgId": "5c887bc0a82244c7969c08000f5b3ae8",
|
|
131
|
+
"parentId": "",
|
|
132
|
+
"sendTime": 1748613098989,
|
|
133
|
+
"chatId": "49871624",
|
|
134
|
+
"chatType": "bot",
|
|
135
|
+
"contentType": "text",
|
|
136
|
+
"content": {
|
|
137
|
+
"text": "你好"
|
|
138
|
+
},
|
|
139
|
+
"instructionId": 0,
|
|
140
|
+
"instructionName": "",
|
|
141
|
+
"commandId": 0,
|
|
142
|
+
"comandName": ""
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
```
|
|
147
|
+
##### 指令消息事件
|
|
148
|
+
当用户点击聊天栏的"/"图标时,将列出该机器人/群聊可用的所有指令。用户发送带有指令的消息后,将会触发该事件。
|
|
92
149
|
```json
|
|
93
150
|
{
|
|
94
151
|
"version": "1.0",
|
|
95
152
|
"header": {
|
|
96
|
-
"eventId": "
|
|
97
|
-
"
|
|
98
|
-
"
|
|
153
|
+
"eventId": "ee74aded326b4578959073fe88f0076a",
|
|
154
|
+
"eventType": "message.receive.instruction",
|
|
155
|
+
"eventTime": 1749442433069
|
|
99
156
|
},
|
|
100
157
|
"event": {
|
|
101
158
|
"sender": {
|
|
102
|
-
"senderId": "
|
|
159
|
+
"senderId": "6300451",
|
|
103
160
|
"senderType": "user",
|
|
104
|
-
"senderUserLevel": "
|
|
105
|
-
"senderNickname": "
|
|
161
|
+
"senderUserLevel": "owner",
|
|
162
|
+
"senderNickname": "ShanFish"
|
|
106
163
|
},
|
|
107
164
|
"chat": {
|
|
108
|
-
"chatId": "
|
|
109
|
-
"chatType": "
|
|
165
|
+
"chatId": "49871624",
|
|
166
|
+
"chatType": "bot"
|
|
110
167
|
},
|
|
111
168
|
"message": {
|
|
112
|
-
"msgId": "
|
|
113
|
-
"parentId": "
|
|
114
|
-
"sendTime":
|
|
115
|
-
"chatId": "
|
|
116
|
-
"chatType": "
|
|
169
|
+
"msgId": "1d879c6ec68c4c52b78f87d83084955e",
|
|
170
|
+
"parentId": "",
|
|
171
|
+
"sendTime": 1749442433057,
|
|
172
|
+
"chatId": "49871624",
|
|
173
|
+
"chatType": "bot",
|
|
117
174
|
"contentType": "text",
|
|
118
175
|
"content": {
|
|
119
|
-
"text": "
|
|
176
|
+
"text": "/抽奖信息",
|
|
177
|
+
"menu": {}
|
|
120
178
|
},
|
|
121
|
-
"
|
|
122
|
-
"
|
|
179
|
+
"instructionId": 1505,
|
|
180
|
+
"instructionName": "抽奖信息",
|
|
181
|
+
"commandId": 1505,
|
|
182
|
+
"commandName": "抽奖信息"
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
```
|
|
187
|
+
##### 用户加群事件
|
|
188
|
+
当用户加入机器人所在的群聊后,将会触发该事件。
|
|
189
|
+
```json
|
|
190
|
+
{
|
|
191
|
+
"version": "1.0",
|
|
192
|
+
"header": {
|
|
193
|
+
"eventId": "d5429cb5e4654fbcaeee9e4adb244741",
|
|
194
|
+
"eventType": "group.join",
|
|
195
|
+
"eventTime": 1749442891943
|
|
196
|
+
},
|
|
197
|
+
"event": {
|
|
198
|
+
"time": 1749442891843,
|
|
199
|
+
"chatId": "985140593",
|
|
200
|
+
"chatType": "group",
|
|
201
|
+
"userId": "3707697",
|
|
202
|
+
"nickname": "ShanFishApp",
|
|
203
|
+
"avatarUrl": "https://chat-storage1.jwznb.com/defalut-avatars/Ma%20Rainey.png?sign=b19c8978f4e0d9e43a8aec4f1e3c82ef&t=68466f5b"
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
```
|
|
207
|
+
##### 用户退群事件
|
|
208
|
+
```json
|
|
209
|
+
{
|
|
210
|
+
"version": "1.0",
|
|
211
|
+
"header": {
|
|
212
|
+
"eventId": "06959e95aaf547078367104ba754c554",
|
|
213
|
+
"eventType": "group.leave",
|
|
214
|
+
"eventTime": 1749442644367
|
|
215
|
+
},
|
|
216
|
+
"event": {
|
|
217
|
+
"time": 1749442644343,
|
|
218
|
+
"chatId": "985140593",
|
|
219
|
+
"chatType": "group",
|
|
220
|
+
"userId": "3707697",
|
|
221
|
+
"nickname": "ShanFishApp",
|
|
222
|
+
"avatarUrl": "https://chat-storage1.jwznb.com/defalut-avatars/Ma%20Rainey.png?sign=92fdef22a240a05de78b13afdab5ac51&t=68466e64"
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
```
|
|
226
|
+
##### 用户关注机器人事件
|
|
227
|
+
当用户在机器人ID或机器人推荐处添加机器人后,将会触发该事件。
|
|
228
|
+
```json
|
|
229
|
+
{
|
|
230
|
+
"version": "1.0",
|
|
231
|
+
"header": {
|
|
232
|
+
"eventId": "3fe280a400f9460daa03a642d1fad39b",
|
|
233
|
+
"eventType": "bot.followed",
|
|
234
|
+
"eventTime": 1749443049592
|
|
235
|
+
},
|
|
236
|
+
"event": {
|
|
237
|
+
"time": 1749443049580,
|
|
238
|
+
"chatId": "49871624",
|
|
239
|
+
"chatType": "bot",
|
|
240
|
+
"userId": "3707697",
|
|
241
|
+
"nickname": "ShanFishApp",
|
|
242
|
+
"avatarUrl": "https://chat-storage1.jwznb.com/defalut-avatars/Ma%20Rainey.png?sign=33bb173f1b22ed0e44da048b175767c6&t=68466ff9"
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
```
|
|
246
|
+
##### 用户取关机器人事件
|
|
247
|
+
当用户点击删除机器人按钮后,将会触发该事件。
|
|
248
|
+
```json
|
|
249
|
+
{
|
|
250
|
+
"version": "1.0",
|
|
251
|
+
"header": {
|
|
252
|
+
"eventId": "b4f51386d916464b99782052c030c5b7",
|
|
253
|
+
"eventType": "bot.unfollowed",
|
|
254
|
+
"eventTime": 1749443036382
|
|
255
|
+
},
|
|
256
|
+
"event": {
|
|
257
|
+
"time": 1749443036373,
|
|
258
|
+
"chatId": "49871624",
|
|
259
|
+
"chatType": "bot",
|
|
260
|
+
"userId": "3707697",
|
|
261
|
+
"nickname": "ShanFishApp",
|
|
262
|
+
"avatarUrl": "https://chat-storage1.jwznb.com/defalut-avatars/Ma%20Rainey.png?sign=07cf8e9d6ca0875835f9a4a6811b6b4c&t=68466fec"
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
```
|
|
266
|
+
##### 按钮汇报事件
|
|
267
|
+
机器人可以发送带按钮的消息。当用户按下按钮actionType为3(汇报类按钮)的按钮时,将会触发该事件。
|
|
268
|
+
```json
|
|
269
|
+
{
|
|
270
|
+
"version": "1.0",
|
|
271
|
+
"header": {
|
|
272
|
+
"eventId": "0d6d269ff7f046828c8562f905f9ee08",
|
|
273
|
+
"eventType": "button.report.inline",
|
|
274
|
+
"eventTime": 1749446185273
|
|
275
|
+
},
|
|
276
|
+
"event": {
|
|
277
|
+
"time": 1749446185268,
|
|
278
|
+
"msgId": "1838c3dd84474e9e9e1e00ca64e72065",
|
|
279
|
+
"recvId": "6300451",
|
|
280
|
+
"recvType": "user",
|
|
281
|
+
"userId": "6300451",
|
|
282
|
+
"value": "xxxx"
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
##### 快捷菜单事件
|
|
288
|
+
当用户点击了开发者自行配置的快捷菜单时,且该快捷菜单类型为普通菜单,将会触发本事件。
|
|
289
|
+
```json
|
|
290
|
+
{
|
|
291
|
+
"version": "1.0",
|
|
292
|
+
"header": {
|
|
293
|
+
"eventId": "93d0e36ce0334da58448409fd0527590",
|
|
294
|
+
"eventType": "bot.shortcut.menu",
|
|
295
|
+
"eventTime": 1749445822197
|
|
296
|
+
},
|
|
297
|
+
"event": {
|
|
298
|
+
"botId": "49871624",
|
|
299
|
+
"menuId": "HNH1LDHF",
|
|
300
|
+
"menuType": 1,
|
|
301
|
+
"menuAction": 1,
|
|
302
|
+
"chatId": "985140593",
|
|
303
|
+
"chatType": "group",
|
|
304
|
+
"senderType": "user",
|
|
305
|
+
"senderId": "6300451",
|
|
306
|
+
"sendTime": 1749445822
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
```
|
|
311
|
+
##### 机器人设置事件
|
|
312
|
+
当开发者配置了机器人设置项时,在机器人列表处将会出现"设置"按钮。用户设置完成后,将会触发本事件。
|
|
313
|
+
```json
|
|
314
|
+
{
|
|
315
|
+
"version": "1.0",
|
|
316
|
+
"header": {
|
|
317
|
+
"eventId": "5ad7e23399ef46a685cead1abe2efa19",
|
|
318
|
+
"eventType": "bot.setting",
|
|
319
|
+
"eventTime": 1749446299131
|
|
320
|
+
},
|
|
321
|
+
"event": {
|
|
322
|
+
"time": 1749446299128,
|
|
323
|
+
"chatId": "49871624",
|
|
324
|
+
"chatType": "bot",
|
|
325
|
+
"groupId": "985140593",
|
|
326
|
+
"groupName": "云湖测试群",
|
|
327
|
+
"avatarUrl": "https://chat-img.jwznb.com/77db590d9cee77de13e7c8cf0887b5ba.jpg",
|
|
328
|
+
"settingJson": {
|
|
329
|
+
"wezzrm": {
|
|
330
|
+
"id": "wezzrm",
|
|
331
|
+
"type": "switch",
|
|
332
|
+
"label": "测试",
|
|
333
|
+
"value": true
|
|
334
|
+
}
|
|
123
335
|
}
|
|
124
336
|
}
|
|
125
337
|
}
|
|
338
|
+
|
|
126
339
|
```
|
|
127
340
|
|
|
128
341
|
#### 注意:`chat` 与 `sender` 的误区
|
|
@@ -8,10 +8,20 @@
|
|
|
8
8
|
> **贡献日志**
|
|
9
9
|
> 如需为新版本添加日志,请在对应版本号下补充内容,并注明日期和主要贡献者。
|
|
10
10
|
|
|
11
|
+
## [1.2.3]
|
|
12
|
+
### 新增
|
|
13
|
+
- 安装本地模块时自动安装依赖
|
|
14
|
+
|
|
15
|
+
### 修复
|
|
16
|
+
- 修复使用UV管理器安装SDK后安装模块时提示 "pip" 不存在的错误
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
11
20
|
## [1.2.2]
|
|
12
21
|
|
|
13
22
|
### 修复
|
|
14
23
|
- 初始化项目时自动初始化环境配置的时候两个环境变量被错误覆盖的问题
|
|
24
|
+
|
|
15
25
|
---
|
|
16
26
|
|
|
17
27
|
## [1.2.0]
|
|
@@ -64,6 +74,10 @@
|
|
|
64
74
|
|
|
65
75
|
---
|
|
66
76
|
|
|
77
|
+
|
|
78
|
+
<details>
|
|
79
|
+
<summary>历史版本(1.1.13 及更早)</summary>
|
|
80
|
+
|
|
67
81
|
## [1.1.12 - 1.1.13]
|
|
68
82
|
### 新增
|
|
69
83
|
- 默认模块源,现在直接执行 epsdk update 命令即可添加并更新官方模块源
|
|
@@ -288,9 +302,6 @@
|
|
|
288
302
|
|
|
289
303
|
---
|
|
290
304
|
|
|
291
|
-
<details>
|
|
292
|
-
<summary>历史版本(1.0.11 及更早)</summary>
|
|
293
|
-
|
|
294
305
|
## [1.0.11]
|
|
295
306
|
|
|
296
307
|
### 改进
|
|
@@ -14,6 +14,8 @@
|
|
|
14
14
|
| `upgrade` | `[--force] [--init]` | 升级模块(`--force` 强制覆盖) | `epsdk upgrade --force --init` |
|
|
15
15
|
| `install` | `<module...> [--init]` | 安装一个或多个模块(空格分隔),支持本地目录路径 | `epsdk install YunhuAdapter OpenAI`<br>`epsdk install .`<br>`epsdk install /path/to/module` |
|
|
16
16
|
| `uninstall`| `<module> [--init]` | 移除指定模块 | `epsdk uninstall old-module --init` |
|
|
17
|
+
| `init` | - | 初始化sdk | `epsdk init` |
|
|
18
|
+
| `run` | `<script> [--reload]` | 运行指定脚本(支持热重载) | `epsdk run main.py --reload` |
|
|
17
19
|
|
|
18
20
|
## 源管理
|
|
19
21
|
| 命令 | 参数 | 描述 | 示例 |
|
|
@@ -21,27 +23,6 @@
|
|
|
21
23
|
| `origin add` | `<url>` | 添加源 | `epsdk origin add https://erisdev.com/map.json` |
|
|
22
24
|
| `origin list` | - | 源列表 | `epsdk origin list` |
|
|
23
25
|
| `origin del` | `<url>` | 删除源 | `epsdk origin del https://erisdev.com/map.json` |
|
|
24
|
-
| `run` | `<script> [--reload]` | 运行指定脚本(支持热重载) | `epsdk run main.py --reload` |
|
|
25
|
-
|
|
26
|
-
---
|
|
27
|
-
|
|
28
|
-
## 运行脚本命令详解
|
|
29
|
-
|
|
30
|
-
`run` 命令支持以下参数:
|
|
31
|
-
|
|
32
|
-
- `<script>`: 要运行的Python脚本路径
|
|
33
|
-
- `--reload`: 启用热重载模式,当脚本文件发生变化时自动重启
|
|
34
|
-
|
|
35
|
-
示例:
|
|
36
|
-
```bash
|
|
37
|
-
# 普通运行
|
|
38
|
-
epsdk run main.py
|
|
39
|
-
|
|
40
|
-
# 热重载模式
|
|
41
|
-
epsdk run main.py --reload
|
|
42
|
-
```
|
|
43
|
-
|
|
44
|
-
热重载模式下,任何对脚本文件的修改都会触发自动重启,方便开发调试。
|
|
45
26
|
|
|
46
27
|
---
|
|
47
28
|
|
|
@@ -19,15 +19,9 @@
|
|
|
19
19
|
#### 日志记录:
|
|
20
20
|
|
|
21
21
|
```python
|
|
22
|
-
# 设置日志级别
|
|
23
|
-
sdk.logger.set_level("DEBUG")
|
|
24
|
-
|
|
25
22
|
# 设置单个模块日志级别
|
|
26
23
|
sdk.logger.set_module_level("MyModule", "DEBUG")
|
|
27
24
|
|
|
28
|
-
# 设置日志输出到文件
|
|
29
|
-
sdk.logger.set_output_file("log.txt")
|
|
30
|
-
|
|
31
25
|
# 单次保持所有模块日志历史到文件
|
|
32
26
|
sdk.logger.save_logs("log.txt")
|
|
33
27
|
|
|
@@ -115,10 +109,6 @@ async def my_retry_function():
|
|
|
115
109
|
# 此函数会在异常时自动重试 3 次,每次间隔 1 秒
|
|
116
110
|
...
|
|
117
111
|
|
|
118
|
-
# 可视化模块依赖关系
|
|
119
|
-
topology = sdk.util.show_topology()
|
|
120
|
-
print(topology) # 打印模块依赖拓扑图
|
|
121
|
-
|
|
122
112
|
# 缓存装饰器:缓存函数调用结果(基于参数)
|
|
123
113
|
@sdk.util.cache
|
|
124
114
|
def get_expensive_result(param):
|
|
@@ -131,8 +121,8 @@ def sync_task():
|
|
|
131
121
|
# 此函数将在独立线程中运行,避免阻塞事件循环
|
|
132
122
|
...
|
|
133
123
|
|
|
134
|
-
#
|
|
135
|
-
sdk.util.ExecAsync(sync_task)
|
|
124
|
+
# 在同步函数中调用异步任务
|
|
125
|
+
sdk.util.ExecAsync(sync_task)
|
|
136
126
|
|
|
137
127
|
```
|
|
138
128
|
|
|
@@ -181,7 +171,11 @@ moduleInfo = {
|
|
|
181
171
|
},
|
|
182
172
|
"dependencies": {
|
|
183
173
|
"requires": [], # 必须依赖的其他模块
|
|
184
|
-
"optional": [
|
|
174
|
+
"optional": [ # 可选依赖模块列表(满足其中一个即可)
|
|
175
|
+
"可选模块",
|
|
176
|
+
["可选模块"],
|
|
177
|
+
["可选组依赖模块1", "可选组依赖模块2"]
|
|
178
|
+
],
|
|
185
179
|
"pip": [] # 第三方 pip 包依赖
|
|
186
180
|
}
|
|
187
181
|
}
|
|
@@ -189,6 +183,10 @@ moduleInfo = {
|
|
|
189
183
|
from .Core import Main
|
|
190
184
|
```
|
|
191
185
|
|
|
186
|
+
其中, 可选依赖支持组依赖:
|
|
187
|
+
- 可选模块与组依赖模块(如 `["组依赖模块1", "组依赖模块2"]` 和 `["组依赖模块3", "组依赖模块4"]`)构成“或”关系,即满足其中一组即可。
|
|
188
|
+
- 组依赖模块以数组形式表示,视为一个整体(例如:`组依赖模块1 + 组依赖模块2` 和 `可选模块` 中任意一组存在即符合要求)。
|
|
189
|
+
|
|
192
190
|
> ⚠️ 注意:模块名必须唯一,避免与其他模块冲突。
|
|
193
191
|
|
|
194
192
|
---
|
|
@@ -279,7 +277,7 @@ class Main:
|
|
|
279
277
|
# 在 MyPlatformAdapter 中的方法可以使用 sdk.adapter.<适配器注册名>.<方法名> 访问
|
|
280
278
|
|
|
281
279
|
class MyPlatformAdapter(sdk.BaseAdapter):
|
|
282
|
-
class Send(
|
|
280
|
+
class Send(sdk.BaseAdapter.Send): # 继承BaseAdapter内置的Send类
|
|
283
281
|
# 底层SendDSL中提供了To方法,用户调用的时候类会被定义 `self._target_type` 和 `self._target_id`/`self._target_to` 三个属性
|
|
284
282
|
# 当你只需要一个接受的To时,例如 mail 的To只是一个邮箱,那么你可以使用 `self.To(email)`,这时只会有 `self._target_id`/`self._target_to` 两个属性被定义
|
|
285
283
|
# 或者说你不需要用户的To,那么用户也可以直接使用 Send.Func(text) 的方式直接调用这里的方法
|