ErisPulse 2.1.14.dev1__py3-none-any.whl → 2.1.15.dev3__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/__init__.py +4 -2
- ErisPulse/Core/adapter.py +16 -13
- ErisPulse/Core/config.py +3 -97
- ErisPulse/Core/env.py +8 -535
- ErisPulse/Core/erispulse_config.py +105 -0
- ErisPulse/Core/exceptions.py +50 -78
- ErisPulse/Core/logger.py +79 -2
- ErisPulse/Core/mods.py +22 -18
- ErisPulse/Core/router.py +6 -1
- ErisPulse/Core/storage.py +547 -0
- ErisPulse/__init__.py +40 -22
- ErisPulse/__main__.py +919 -66
- {erispulse-2.1.14.dev1.dist-info → erispulse-2.1.15.dev3.dist-info}/METADATA +34 -19
- erispulse-2.1.15.dev3.dist-info/RECORD +17 -0
- erispulse-2.1.14.dev1.dist-info/RECORD +0 -15
- {erispulse-2.1.14.dev1.dist-info → erispulse-2.1.15.dev3.dist-info}/WHEEL +0 -0
- {erispulse-2.1.14.dev1.dist-info → erispulse-2.1.15.dev3.dist-info}/entry_points.txt +0 -0
- {erispulse-2.1.14.dev1.dist-info → erispulse-2.1.15.dev3.dist-info}/licenses/LICENSE +0 -0
ErisPulse/Core/__init__.py
CHANGED
|
@@ -1,18 +1,20 @@
|
|
|
1
1
|
from .adapter import AdapterFather, SendDSL, adapter
|
|
2
|
+
from .storage import storage
|
|
2
3
|
from .env import env
|
|
3
4
|
from .logger import logger
|
|
4
5
|
from .mods import mods
|
|
5
|
-
from .exceptions import exceptions
|
|
6
6
|
from .router import router, adapter_server
|
|
7
7
|
from .config import config
|
|
8
|
+
from . import exceptions
|
|
9
|
+
|
|
8
10
|
BaseAdapter = AdapterFather
|
|
9
11
|
|
|
10
12
|
__all__ = [
|
|
11
13
|
'BaseAdapter',
|
|
12
14
|
'AdapterFather',
|
|
13
15
|
'SendDSL',
|
|
14
|
-
'exceptions',
|
|
15
16
|
'adapter',
|
|
17
|
+
'storage',
|
|
16
18
|
'env',
|
|
17
19
|
'logger',
|
|
18
20
|
'mods',
|
ErisPulse/Core/adapter.py
CHANGED
|
@@ -18,7 +18,7 @@ from typing import (
|
|
|
18
18
|
Union, Awaitable
|
|
19
19
|
)
|
|
20
20
|
from collections import defaultdict
|
|
21
|
-
|
|
21
|
+
from .logger import logger
|
|
22
22
|
|
|
23
23
|
class SendDSLBase:
|
|
24
24
|
"""
|
|
@@ -112,7 +112,6 @@ class BaseAdapter:
|
|
|
112
112
|
:example:
|
|
113
113
|
>>> await adapter.Send.To("123").Example("Hello")
|
|
114
114
|
"""
|
|
115
|
-
from .logger import logger
|
|
116
115
|
logger.debug(f"适配器 {self._adapter.__class__.__name__} 发送了实例类型的消息: {text}")
|
|
117
116
|
|
|
118
117
|
|
|
@@ -376,7 +375,7 @@ class AdapterManager:
|
|
|
376
375
|
for name in set(combinations):
|
|
377
376
|
setattr(self, name, instance)
|
|
378
377
|
else:
|
|
379
|
-
|
|
378
|
+
logger.warning(f"平台名 {platform} 过长,如果您是开发者,请考虑使用更短的名称")
|
|
380
379
|
setattr(self, platform.lower(), instance)
|
|
381
380
|
setattr(self, platform.upper(), instance)
|
|
382
381
|
setattr(self, platform.capitalize(), instance)
|
|
@@ -405,12 +404,12 @@ class AdapterManager:
|
|
|
405
404
|
if platform not in self._adapters:
|
|
406
405
|
raise ValueError(f"平台 {platform} 未注册")
|
|
407
406
|
|
|
408
|
-
|
|
407
|
+
logger.info(f"启动适配器 {platforms}")
|
|
409
408
|
|
|
410
|
-
# 启动OneBot服务
|
|
411
409
|
from .router import adapter_server
|
|
412
|
-
from .
|
|
410
|
+
from .erispulse_config import get_server_config
|
|
413
411
|
server_config = get_server_config()
|
|
412
|
+
|
|
414
413
|
host = server_config["host"]
|
|
415
414
|
port = server_config["port"]
|
|
416
415
|
ssl_cert = server_config.get("ssl_certfile", None)
|
|
@@ -447,16 +446,14 @@ class AdapterManager:
|
|
|
447
446
|
:param adapter: 适配器实例
|
|
448
447
|
:param platform: 平台名称
|
|
449
448
|
"""
|
|
450
|
-
from .. import sdk
|
|
451
449
|
|
|
452
|
-
# 加锁防止并发启动
|
|
453
450
|
if not getattr(adapter, "_starting_lock", None):
|
|
454
451
|
adapter._starting_lock = asyncio.Lock()
|
|
455
452
|
|
|
456
453
|
async with adapter._starting_lock:
|
|
457
454
|
# 再次确认是否已经被启动
|
|
458
455
|
if adapter in self._started_instances:
|
|
459
|
-
|
|
456
|
+
logger.info(f"适配器 {platform}(实例ID: {id(adapter)})已被其他协程启动,跳过")
|
|
460
457
|
return
|
|
461
458
|
|
|
462
459
|
retry_count = 0
|
|
@@ -470,12 +467,12 @@ class AdapterManager:
|
|
|
470
467
|
return
|
|
471
468
|
except Exception as e:
|
|
472
469
|
retry_count += 1
|
|
473
|
-
|
|
470
|
+
logger.error(f"平台 {platform} 启动失败(第{retry_count}次重试): {e}")
|
|
474
471
|
|
|
475
472
|
try:
|
|
476
473
|
await adapter.shutdown()
|
|
477
474
|
except Exception as stop_err:
|
|
478
|
-
|
|
475
|
+
logger.warning(f"停止适配器失败: {stop_err}")
|
|
479
476
|
|
|
480
477
|
# 计算等待时间
|
|
481
478
|
if retry_count <= len(backoff_intervals):
|
|
@@ -483,7 +480,7 @@ class AdapterManager:
|
|
|
483
480
|
else:
|
|
484
481
|
wait_time = fixed_delay
|
|
485
482
|
|
|
486
|
-
|
|
483
|
+
logger.info(f"将在 {wait_time // 60} 分钟后再次尝试重启 {platform}")
|
|
487
484
|
await asyncio.sleep(wait_time)
|
|
488
485
|
|
|
489
486
|
async def shutdown(self) -> None:
|
|
@@ -548,4 +545,10 @@ class AdapterManager:
|
|
|
548
545
|
|
|
549
546
|
AdapterFather = BaseAdapter
|
|
550
547
|
adapter = AdapterManager()
|
|
551
|
-
SendDSL = SendDSLBase
|
|
548
|
+
SendDSL = SendDSLBase
|
|
549
|
+
|
|
550
|
+
__all__ = [
|
|
551
|
+
"AdapterFather",
|
|
552
|
+
"adapter",
|
|
553
|
+
"SendDSL"
|
|
554
|
+
]
|
ErisPulse/Core/config.py
CHANGED
|
@@ -73,100 +73,6 @@ class ConfigManager:
|
|
|
73
73
|
|
|
74
74
|
config = ConfigManager()
|
|
75
75
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
"host": "0.0.0.0",
|
|
80
|
-
"port": 8000,
|
|
81
|
-
"ssl_certfile": None,
|
|
82
|
-
"ssl_keyfile": None
|
|
83
|
-
},
|
|
84
|
-
"logger": {
|
|
85
|
-
"level": "INFO",
|
|
86
|
-
"log_files": [],
|
|
87
|
-
"memory_limit": 1000
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
def _ensure_config_structure(config: Dict[str, Any]) -> Dict[str, Any]:
|
|
92
|
-
"""
|
|
93
|
-
确保配置结构完整,补全缺失的配置项
|
|
94
|
-
|
|
95
|
-
:param config: 当前配置
|
|
96
|
-
:return: 补全后的完整配置
|
|
97
|
-
"""
|
|
98
|
-
merged_config = DEFAULT_CONFIG.copy()
|
|
99
|
-
|
|
100
|
-
# 深度合并配置
|
|
101
|
-
for section, default_values in DEFAULT_CONFIG.items():
|
|
102
|
-
if section not in config:
|
|
103
|
-
config[section] = default_values.copy()
|
|
104
|
-
continue
|
|
105
|
-
|
|
106
|
-
if not isinstance(config[section], dict):
|
|
107
|
-
config[section] = default_values.copy()
|
|
108
|
-
continue
|
|
109
|
-
|
|
110
|
-
for key, default_value in default_values.items():
|
|
111
|
-
if key not in config[section]:
|
|
112
|
-
config[section][key] = default_value
|
|
113
|
-
|
|
114
|
-
return config
|
|
115
|
-
|
|
116
|
-
def get_config() -> Dict[str, Any]:
|
|
117
|
-
"""
|
|
118
|
-
获取当前配置,自动补全缺失的配置项并保存
|
|
119
|
-
|
|
120
|
-
:return: 完整的配置字典
|
|
121
|
-
"""
|
|
122
|
-
|
|
123
|
-
# 获取现有配置
|
|
124
|
-
current_config = config.getConfig("ErisPulse")
|
|
125
|
-
|
|
126
|
-
# 如果完全没有配置,设置默认配置
|
|
127
|
-
if current_config is None:
|
|
128
|
-
config.setConfig("ErisPulse", DEFAULT_CONFIG)
|
|
129
|
-
return DEFAULT_CONFIG
|
|
130
|
-
|
|
131
|
-
# 检查并补全缺失的配置项
|
|
132
|
-
complete_config = _ensure_config_structure(current_config)
|
|
133
|
-
|
|
134
|
-
# 如果配置有变化,更新到存储
|
|
135
|
-
if current_config != complete_config:
|
|
136
|
-
config.setConfig("ErisPulse", complete_config)
|
|
137
|
-
|
|
138
|
-
return complete_config
|
|
139
|
-
|
|
140
|
-
def update_config(new_config: Dict[str, Any]) -> bool:
|
|
141
|
-
"""
|
|
142
|
-
更新配置,自动补全缺失的配置项
|
|
143
|
-
|
|
144
|
-
:param new_config: 新的配置字典
|
|
145
|
-
:return: 是否更新成功
|
|
146
|
-
"""
|
|
147
|
-
# 获取当前配置并合并新配置
|
|
148
|
-
current = get_config()
|
|
149
|
-
merged = {**current, **new_config}
|
|
150
|
-
|
|
151
|
-
# 确保合并后的配置结构完整
|
|
152
|
-
complete_config = _ensure_config_structure(merged)
|
|
153
|
-
|
|
154
|
-
return config.setConfig("ErisPulse", complete_config)
|
|
155
|
-
|
|
156
|
-
def get_server_config() -> Dict[str, Any]:
|
|
157
|
-
"""
|
|
158
|
-
获取服务器配置,确保结构完整
|
|
159
|
-
|
|
160
|
-
:return: 服务器配置字典
|
|
161
|
-
"""
|
|
162
|
-
config = get_config()
|
|
163
|
-
return config["server"]
|
|
164
|
-
|
|
165
|
-
def get_logger_config() -> Dict[str, Any]:
|
|
166
|
-
"""
|
|
167
|
-
获取日志配置,确保结构完整
|
|
168
|
-
|
|
169
|
-
:return: 日志配置字典
|
|
170
|
-
"""
|
|
171
|
-
config = get_config()
|
|
172
|
-
return config["logger"]
|
|
76
|
+
__all__ = [
|
|
77
|
+
"config"
|
|
78
|
+
]
|