ErisPulse 2.1.15.dev3__py3-none-any.whl → 2.2.0.dev1__py3-none-any.whl
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/Core/Event/__init__.py +48 -0
- ErisPulse/Core/Event/base.py +117 -0
- ErisPulse/Core/Event/cmd.py +210 -0
- ErisPulse/Core/Event/exceptions.py +37 -0
- ErisPulse/Core/Event/manager.py +127 -0
- ErisPulse/Core/Event/message.py +89 -0
- ErisPulse/Core/Event/meta.py +81 -0
- ErisPulse/Core/Event/notice.py +96 -0
- ErisPulse/Core/Event/request.py +66 -0
- ErisPulse/Core/__init__.py +7 -2
- ErisPulse/Core/logger.py +2 -2
- ErisPulse/Core/module.py +150 -0
- ErisPulse/Core/{mods.py → module_registry.py} +41 -37
- ErisPulse/__init__.py +16 -9
- ErisPulse/__main__.py +115 -48
- {erispulse-2.1.15.dev3.dist-info → erispulse-2.2.0.dev1.dist-info}/METADATA +7 -1
- erispulse-2.2.0.dev1.dist-info/RECORD +27 -0
- {erispulse-2.1.15.dev3.dist-info → erispulse-2.2.0.dev1.dist-info}/licenses/LICENSE +7 -1
- erispulse-2.1.15.dev3.dist-info/RECORD +0 -17
- {erispulse-2.1.15.dev3.dist-info → erispulse-2.2.0.dev1.dist-info}/WHEEL +0 -0
- {erispulse-2.1.15.dev3.dist-info → erispulse-2.2.0.dev1.dist-info}/entry_points.txt +0 -0
ErisPulse/__main__.py
CHANGED
|
@@ -249,8 +249,8 @@ class PackageManager:
|
|
|
249
249
|
:raises ImportError: 核心模块不可用时抛出
|
|
250
250
|
"""
|
|
251
251
|
try:
|
|
252
|
-
from ErisPulse.Core import
|
|
253
|
-
return
|
|
252
|
+
from ErisPulse.Core import module_registry
|
|
253
|
+
return module_registry.get_module_status(module_name)
|
|
254
254
|
except ImportError:
|
|
255
255
|
return True
|
|
256
256
|
except Exception:
|
|
@@ -339,28 +339,44 @@ class PackageManager:
|
|
|
339
339
|
[sys.executable, "-m", "pip"] + args,
|
|
340
340
|
stdout=subprocess.PIPE,
|
|
341
341
|
stderr=subprocess.PIPE,
|
|
342
|
-
universal_newlines=True
|
|
342
|
+
universal_newlines=True,
|
|
343
|
+
bufsize=1 # 行缓冲
|
|
343
344
|
)
|
|
344
345
|
|
|
345
346
|
stdout_lines = []
|
|
346
347
|
stderr_lines = []
|
|
347
348
|
|
|
348
|
-
#
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
349
|
+
# 使用超时机制避免永久阻塞
|
|
350
|
+
import threading
|
|
351
|
+
import queue
|
|
352
|
+
|
|
353
|
+
def read_output(pipe, lines_list):
|
|
354
|
+
try:
|
|
355
|
+
for line in iter(pipe.readline, ''):
|
|
356
|
+
lines_list.append(line)
|
|
357
|
+
progress.update(task, advance=5) # 每行增加进度
|
|
358
|
+
pipe.close()
|
|
359
|
+
except Exception:
|
|
360
|
+
pass
|
|
361
|
+
|
|
362
|
+
stdout_thread = threading.Thread(target=read_output, args=(process.stdout, stdout_lines))
|
|
363
|
+
stderr_thread = threading.Thread(target=read_output, args=(process.stderr, stderr_lines))
|
|
364
|
+
|
|
365
|
+
stdout_thread.start()
|
|
366
|
+
stderr_thread.start()
|
|
367
|
+
|
|
368
|
+
# 等待进程结束,最多等待5分钟
|
|
369
|
+
try:
|
|
370
|
+
process.wait(timeout=300)
|
|
371
|
+
except subprocess.TimeoutExpired:
|
|
372
|
+
process.kill()
|
|
373
|
+
process.wait()
|
|
374
|
+
console.print("[warning]命令执行超时,已强制终止[/]")
|
|
375
|
+
return False, "", "命令执行超时"
|
|
376
|
+
|
|
377
|
+
stdout_thread.join(timeout=10)
|
|
378
|
+
stderr_thread.join(timeout=10)
|
|
379
|
+
|
|
364
380
|
stdout = ''.join(stdout_lines)
|
|
365
381
|
stderr = ''.join(stderr_lines)
|
|
366
382
|
|
|
@@ -368,7 +384,9 @@ class PackageManager:
|
|
|
368
384
|
except subprocess.CalledProcessError as e:
|
|
369
385
|
console.print(f"[error]命令执行失败: {e}[/]")
|
|
370
386
|
return False, "", str(e)
|
|
371
|
-
|
|
387
|
+
except Exception as e:
|
|
388
|
+
console.print(f"[error]执行过程中发生异常: {e}[/]")
|
|
389
|
+
return False, "", str(e)
|
|
372
390
|
|
|
373
391
|
def _compare_versions(self, version1: str, version2: str) -> int:
|
|
374
392
|
"""
|
|
@@ -813,34 +831,83 @@ class PackageManager:
|
|
|
813
831
|
if target_version:
|
|
814
832
|
package_spec += f"=={target_version}"
|
|
815
833
|
|
|
816
|
-
#
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
|
|
834
|
+
# 检查是否在Windows上且尝试更新自身
|
|
835
|
+
if sys.platform == "win32":
|
|
836
|
+
# 构建更新脚本
|
|
837
|
+
update_script = f"""
|
|
838
|
+
import time
|
|
839
|
+
import subprocess
|
|
840
|
+
import sys
|
|
841
|
+
import os
|
|
842
|
+
|
|
843
|
+
# 等待原进程结束
|
|
844
|
+
time.sleep(2)
|
|
845
|
+
|
|
846
|
+
# 执行更新命令
|
|
847
|
+
try:
|
|
848
|
+
result = subprocess.run([
|
|
849
|
+
sys.executable, "-m", "pip", "install", "--upgrade", "{package_spec}"
|
|
850
|
+
], capture_output=True, text=True, timeout=300)
|
|
851
|
+
|
|
852
|
+
if result.returncode == 0:
|
|
853
|
+
print("更新成功!")
|
|
854
|
+
print(result.stdout)
|
|
855
|
+
else:
|
|
856
|
+
print("更新失败:")
|
|
857
|
+
print(result.stderr)
|
|
858
|
+
except Exception as e:
|
|
859
|
+
print(f"更新过程中出错: {{e}}")
|
|
860
|
+
|
|
861
|
+
# 清理临时脚本
|
|
862
|
+
try:
|
|
863
|
+
os.remove(__file__)
|
|
864
|
+
except:
|
|
865
|
+
pass
|
|
866
|
+
"""
|
|
867
|
+
# 创建临时更新脚本
|
|
868
|
+
import tempfile
|
|
869
|
+
script_path = os.path.join(tempfile.gettempdir(), "epsdk_update.py")
|
|
870
|
+
with open(script_path, "w", encoding="utf-8") as f:
|
|
871
|
+
f.write(update_script)
|
|
872
|
+
|
|
873
|
+
# 启动更新进程并退出当前进程
|
|
874
|
+
console.print("[info]正在启动更新进程...[/]")
|
|
875
|
+
console.print("[info]请稍后重新运行CLI以使用新版本[/]")
|
|
832
876
|
|
|
833
|
-
|
|
834
|
-
|
|
877
|
+
subprocess.Popen([
|
|
878
|
+
sys.executable, script_path
|
|
879
|
+
], creationflags=subprocess.CREATE_NEW_CONSOLE)
|
|
880
|
+
|
|
881
|
+
return True
|
|
835
882
|
else:
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
))
|
|
883
|
+
# 非Windows平台
|
|
884
|
+
success, stdout, stderr = self._run_pip_command_with_output(
|
|
885
|
+
["install", "--upgrade", package_spec],
|
|
886
|
+
f"更新 ErisPulse SDK {f'到 {target_version}' if target_version else '到最新版本'}"
|
|
887
|
+
)
|
|
842
888
|
|
|
843
|
-
|
|
889
|
+
if success:
|
|
890
|
+
new_version = target_version or "最新版本"
|
|
891
|
+
console.print(Panel(
|
|
892
|
+
f"[success]ErisPulse SDK 更新成功[/]\n"
|
|
893
|
+
f" 当前版本: [bold]{current_version}[/]\n"
|
|
894
|
+
f" 更新版本: [bold]{new_version}[/]\n\n"
|
|
895
|
+
f"[dim]{stdout}[/]",
|
|
896
|
+
title="更新完成",
|
|
897
|
+
border_style="success"
|
|
898
|
+
))
|
|
899
|
+
|
|
900
|
+
if not target_version:
|
|
901
|
+
console.print("[info]请重新启动CLI以使用新版本[/]")
|
|
902
|
+
else:
|
|
903
|
+
console.print(Panel(
|
|
904
|
+
f"[error]ErisPulse SDK 更新失败[/]\n\n"
|
|
905
|
+
f"[dim]{stderr}[/]",
|
|
906
|
+
title="更新失败",
|
|
907
|
+
border_style="error"
|
|
908
|
+
))
|
|
909
|
+
|
|
910
|
+
return success
|
|
844
911
|
|
|
845
912
|
class ReloadHandler(FileSystemEventHandler):
|
|
846
913
|
"""
|
|
@@ -1651,21 +1718,21 @@ class CLI:
|
|
|
1651
1718
|
sys.exit(1)
|
|
1652
1719
|
|
|
1653
1720
|
elif args.command == "module":
|
|
1654
|
-
from ErisPulse.Core import
|
|
1721
|
+
from ErisPulse.Core import module_registry
|
|
1655
1722
|
installed = self.package_manager.get_installed_packages()
|
|
1656
1723
|
|
|
1657
1724
|
if args.module_command == "enable":
|
|
1658
1725
|
if args.module not in installed["modules"]:
|
|
1659
1726
|
console.print(f"[error]模块 [bold]{args.module}[/] 不存在或未安装[/]")
|
|
1660
1727
|
else:
|
|
1661
|
-
|
|
1728
|
+
module_registry.set_module_status(args.module, True)
|
|
1662
1729
|
console.print(f"[success]模块 [bold]{args.module}[/] 已启用[/]")
|
|
1663
1730
|
|
|
1664
1731
|
elif args.module_command == "disable":
|
|
1665
1732
|
if args.module not in installed["modules"]:
|
|
1666
1733
|
console.print(f"[error]模块 [bold]{args.module}[/] 不存在或未安装[/]")
|
|
1667
1734
|
else:
|
|
1668
|
-
|
|
1735
|
+
module_registry.set_module_status(args.module, False)
|
|
1669
1736
|
console.print(f"[warning]模块 [bold]{args.module}[/] 已禁用[/]")
|
|
1670
1737
|
else:
|
|
1671
1738
|
self.parser.parse_args(["module", "--help"])
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ErisPulse
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.2.0.dev1
|
|
4
4
|
Summary: ErisPulse 是一个模块化、可扩展的异步 Python SDK 框架,主要用于构建高效、可维护的机器人应用程序。
|
|
5
5
|
Author-email: "艾莉丝·格雷拉特(WSu2059)" <wsu2059@qq.com>
|
|
6
6
|
License: MIT License
|
|
@@ -34,6 +34,12 @@ License: MIT License
|
|
|
34
34
|
- Metadata definitions
|
|
35
35
|
|
|
36
36
|
This ensures consistent behavior and interoperability across all adapter implementations.
|
|
37
|
+
|
|
38
|
+
感谢所有为开源社区做出贡献的开发者和作者
|
|
39
|
+
|
|
40
|
+
请尊重每一位开源作者的劳动成果,承诺在使用、修改和分发本软件时,将严格遵守相关许可证条款,并保留所有原始版权声明
|
|
41
|
+
|
|
42
|
+
开源精神的核心在于分享、协作与尊重。我们希望通过本项目,能够传承这一精神,为开源社区的发展贡献一份力量
|
|
37
43
|
License-File: LICENSE
|
|
38
44
|
Classifier: Development Status :: 5 - Production/Stable
|
|
39
45
|
Classifier: Intended Audience :: Developers
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
ErisPulse/__init__.py,sha256=L-YLh-5qMYydReBiBO9weceeH7PVv2ONBo40o5ekr3Y,27133
|
|
2
|
+
ErisPulse/__main__.py,sha256=GUh_30fEkWmE0udDFe1Kkwf41hg2v4WgbRY1RswJ9Uc,76331
|
|
3
|
+
ErisPulse/Core/__init__.py,sha256=96QS7gD0QNt27wQkIprye7y_Nja_IH2XUqPstZ4uLsY,589
|
|
4
|
+
ErisPulse/Core/adapter.py,sha256=y75u_heNmpYLDjIBtVTfMzTHZFixWtYFv0JVskNI-2w,18300
|
|
5
|
+
ErisPulse/Core/config.py,sha256=y0ChfCuw-6jAqs9Ii2tPJg0e4A765qzQLRcK6O8zh4c,2425
|
|
6
|
+
ErisPulse/Core/env.py,sha256=IT_6Xks5Ka089O_4SVTvYNIC9Ly1IHX_Esb3SsleRj8,338
|
|
7
|
+
ErisPulse/Core/erispulse_config.py,sha256=QDx401hNX9JcSHqCSVK33X6VTubl6HI1znAK3T_J0K0,3034
|
|
8
|
+
ErisPulse/Core/exceptions.py,sha256=zuTREGczwGzbYT4Z6dACqHwgNRpiJeLFR8aCxFdOg7k,3667
|
|
9
|
+
ErisPulse/Core/logger.py,sha256=g8HgpzK3k-WpnuiU_UQKWdw4s7BLLHOS23uDFrO_7W8,11285
|
|
10
|
+
ErisPulse/Core/module.py,sha256=wCIFC3qHukeu7DSj8TuNMw8s_gzTwk7_coM4oflmieA,4680
|
|
11
|
+
ErisPulse/Core/module_registry.py,sha256=BeOQwh3Pwv2fceBLJEObF6Ek65td0VOFzv3L0aEudXY,7740
|
|
12
|
+
ErisPulse/Core/router.py,sha256=s2EBh2qpt3UXYhB06Ppc1XTFuZ3u0ZfXENJxwkgPoq8,8542
|
|
13
|
+
ErisPulse/Core/storage.py,sha256=oRum4eVaTc3yxcaafggoIvrk41LPbvApSCxkGM3YmzU,17904
|
|
14
|
+
ErisPulse/Core/Event/__init__.py,sha256=xndqrBPwIrvS8rspy8c_4We6sfrjNCFBJNmcBuMv0NU,1019
|
|
15
|
+
ErisPulse/Core/Event/base.py,sha256=cr7FEaSnxxpAKNMR9a4RkX6xX5BiqndsMwBZV_me4W8,3741
|
|
16
|
+
ErisPulse/Core/Event/cmd.py,sha256=iiKcvHFYYj_1ZnhmFJ0Ow4X96MjwSYIrGW_IWw0Z74w,6909
|
|
17
|
+
ErisPulse/Core/Event/exceptions.py,sha256=iGcuPaC7F4cZeujcvBdZb9bzQGnHBdb9CcPKoB760Bo,711
|
|
18
|
+
ErisPulse/Core/Event/manager.py,sha256=S__BVAyGbY41W4ocPiTQ00BDaPxH-kj0lWoLl2Q3MRw,4225
|
|
19
|
+
ErisPulse/Core/Event/message.py,sha256=TBDmeribhCRQrV6M0Df_815PgBwneap1-e0xc9IvT9k,2581
|
|
20
|
+
ErisPulse/Core/Event/meta.py,sha256=ThUrYhTDPjzy3XwlMEGTFTzQBOV7-irtIvbPEe76Mk4,2243
|
|
21
|
+
ErisPulse/Core/Event/notice.py,sha256=lnPJCTfAe5xviO-IkpCkcP8UhaAEJ3FvtBbNmoS9Ji4,2789
|
|
22
|
+
ErisPulse/Core/Event/request.py,sha256=Ri46OFYu7jkFeRqS4kHD_6j7KCpOdmDNjrxAki5YsWQ,1817
|
|
23
|
+
erispulse-2.2.0.dev1.dist-info/METADATA,sha256=9W2b-GP4uSM5IO4xV_owvZJcPUJmvT2EgsXrggvMjUY,7290
|
|
24
|
+
erispulse-2.2.0.dev1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
25
|
+
erispulse-2.2.0.dev1.dist-info/entry_points.txt,sha256=Jss71M6nEha0TA-DyVZugPYdcL14s9QpiOeIlgWxzOc,182
|
|
26
|
+
erispulse-2.2.0.dev1.dist-info/licenses/LICENSE,sha256=b2XwzcfWuv_36Op3xGdjcuPHgfCz62yT3bXYjfStpxY,1852
|
|
27
|
+
erispulse-2.2.0.dev1.dist-info/RECORD,,
|
|
@@ -28,4 +28,10 @@ This SDK's core adapter standardization layer strictly follows OneBot12 specific
|
|
|
28
28
|
- Message segment definitions
|
|
29
29
|
- Metadata definitions
|
|
30
30
|
|
|
31
|
-
This ensures consistent behavior and interoperability across all adapter implementations.
|
|
31
|
+
This ensures consistent behavior and interoperability across all adapter implementations.
|
|
32
|
+
|
|
33
|
+
感谢所有为开源社区做出贡献的开发者和作者
|
|
34
|
+
|
|
35
|
+
请尊重每一位开源作者的劳动成果,承诺在使用、修改和分发本软件时,将严格遵守相关许可证条款,并保留所有原始版权声明
|
|
36
|
+
|
|
37
|
+
开源精神的核心在于分享、协作与尊重。我们希望通过本项目,能够传承这一精神,为开源社区的发展贡献一份力量
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
ErisPulse/__init__.py,sha256=ElwKDJgga0oePhwPXuxgUsWMevpfXdsii0X0zuJPmC0,26790
|
|
2
|
-
ErisPulse/__main__.py,sha256=ePvZuyPEq5-ODog3aFMPQJCbj3TNKsZU_N3kynJ6aek,73908
|
|
3
|
-
ErisPulse/Core/__init__.py,sha256=VCYMC8Ehfw603jV9KFaWdiWAh4UORSqrMTRuVfXZK0I,481
|
|
4
|
-
ErisPulse/Core/adapter.py,sha256=y75u_heNmpYLDjIBtVTfMzTHZFixWtYFv0JVskNI-2w,18300
|
|
5
|
-
ErisPulse/Core/config.py,sha256=y0ChfCuw-6jAqs9Ii2tPJg0e4A765qzQLRcK6O8zh4c,2425
|
|
6
|
-
ErisPulse/Core/env.py,sha256=IT_6Xks5Ka089O_4SVTvYNIC9Ly1IHX_Esb3SsleRj8,338
|
|
7
|
-
ErisPulse/Core/erispulse_config.py,sha256=QDx401hNX9JcSHqCSVK33X6VTubl6HI1znAK3T_J0K0,3034
|
|
8
|
-
ErisPulse/Core/exceptions.py,sha256=zuTREGczwGzbYT4Z6dACqHwgNRpiJeLFR8aCxFdOg7k,3667
|
|
9
|
-
ErisPulse/Core/logger.py,sha256=6p53nQE7NFXSqs_lftW-HQB1BQcgruAYOpIYx25QLVA,11252
|
|
10
|
-
ErisPulse/Core/mods.py,sha256=vKLEDr2nQ4kUULHmUQYFbRL04ePIKlwLEOGB-ldMYS8,7130
|
|
11
|
-
ErisPulse/Core/router.py,sha256=s2EBh2qpt3UXYhB06Ppc1XTFuZ3u0ZfXENJxwkgPoq8,8542
|
|
12
|
-
ErisPulse/Core/storage.py,sha256=oRum4eVaTc3yxcaafggoIvrk41LPbvApSCxkGM3YmzU,17904
|
|
13
|
-
erispulse-2.1.15.dev3.dist-info/METADATA,sha256=2F6t5xA_I3utUv6eRjgXJ24--oYEpHWQ8ZauCLRbI6I,6856
|
|
14
|
-
erispulse-2.1.15.dev3.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
15
|
-
erispulse-2.1.15.dev3.dist-info/entry_points.txt,sha256=Jss71M6nEha0TA-DyVZugPYdcL14s9QpiOeIlgWxzOc,182
|
|
16
|
-
erispulse-2.1.15.dev3.dist-info/licenses/LICENSE,sha256=4jyqikiB0G0n06CEEMMTzTXjE4IShghSlB74skMSPQs,1464
|
|
17
|
-
erispulse-2.1.15.dev3.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|