AstrBot 4.1.2__py3-none-any.whl → 4.1.3__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.
- astrbot/core/agent/runners/tool_loop_agent_runner.py +1 -1
- astrbot/core/config/default.py +24 -1
- astrbot/core/pipeline/respond/stage.py +103 -77
- astrbot/core/platform/astrbot_message.py +23 -1
- astrbot/core/platform/sources/aiocqhttp/aiocqhttp_platform_adapter.py +1 -0
- astrbot/core/star/filter/command.py +4 -3
- {astrbot-4.1.2.dist-info → astrbot-4.1.3.dist-info}/METADATA +1 -1
- {astrbot-4.1.2.dist-info → astrbot-4.1.3.dist-info}/RECORD +11 -11
- {astrbot-4.1.2.dist-info → astrbot-4.1.3.dist-info}/WHEEL +0 -0
- {astrbot-4.1.2.dist-info → astrbot-4.1.3.dist-info}/entry_points.txt +0 -0
- {astrbot-4.1.2.dist-info → astrbot-4.1.3.dist-info}/licenses/LICENSE +0 -0
|
@@ -258,7 +258,7 @@ class ToolLoopAgentRunner(BaseAgentRunner[TContext]):
|
|
|
258
258
|
)
|
|
259
259
|
yield MessageChain(
|
|
260
260
|
type="tool_direct_result"
|
|
261
|
-
).base64_image(
|
|
261
|
+
).base64_image(resource.blob)
|
|
262
262
|
else:
|
|
263
263
|
tool_call_result_blocks.append(
|
|
264
264
|
ToolCallMessageSegment(
|
astrbot/core/config/default.py
CHANGED
|
@@ -6,7 +6,7 @@ import os
|
|
|
6
6
|
|
|
7
7
|
from astrbot.core.utils.astrbot_path import get_astrbot_data_path
|
|
8
8
|
|
|
9
|
-
VERSION = "4.1.
|
|
9
|
+
VERSION = "4.1.3"
|
|
10
10
|
DB_PATH = os.path.join(get_astrbot_data_path(), "data_v4.db")
|
|
11
11
|
|
|
12
12
|
# 默认配置
|
|
@@ -60,6 +60,7 @@ DEFAULT_CONFIG = {
|
|
|
60
60
|
"web_search_link": False,
|
|
61
61
|
"display_reasoning_text": False,
|
|
62
62
|
"identifier": False,
|
|
63
|
+
"group_name_display": False,
|
|
63
64
|
"datetime_system_prompt": True,
|
|
64
65
|
"default_personality": "default",
|
|
65
66
|
"persona_pool": ["*"],
|
|
@@ -1724,6 +1725,9 @@ CONFIG_METADATA_2 = {
|
|
|
1724
1725
|
"identifier": {
|
|
1725
1726
|
"type": "bool",
|
|
1726
1727
|
},
|
|
1728
|
+
"group_name_display": {
|
|
1729
|
+
"type": "bool",
|
|
1730
|
+
},
|
|
1727
1731
|
"datetime_system_prompt": {
|
|
1728
1732
|
"type": "bool",
|
|
1729
1733
|
},
|
|
@@ -1903,17 +1907,31 @@ CONFIG_METADATA_3 = {
|
|
|
1903
1907
|
"_special": "select_provider",
|
|
1904
1908
|
"hint": "留空代表不使用。可用于不支持视觉模态的聊天模型。",
|
|
1905
1909
|
},
|
|
1910
|
+
"provider_stt_settings.enable": {
|
|
1911
|
+
"description": "默认启用语音转文本",
|
|
1912
|
+
"type": "bool",
|
|
1913
|
+
},
|
|
1906
1914
|
"provider_stt_settings.provider_id": {
|
|
1907
1915
|
"description": "语音转文本模型",
|
|
1908
1916
|
"type": "string",
|
|
1909
1917
|
"hint": "留空代表不使用。",
|
|
1910
1918
|
"_special": "select_provider_stt",
|
|
1919
|
+
"condition": {
|
|
1920
|
+
"provider_stt_settings.enable": True,
|
|
1921
|
+
},
|
|
1922
|
+
},
|
|
1923
|
+
"provider_tts_settings.enable": {
|
|
1924
|
+
"description": "默认启用文本转语音",
|
|
1925
|
+
"type": "bool",
|
|
1911
1926
|
},
|
|
1912
1927
|
"provider_tts_settings.provider_id": {
|
|
1913
1928
|
"description": "文本转语音模型",
|
|
1914
1929
|
"type": "string",
|
|
1915
1930
|
"hint": "留空代表不使用。",
|
|
1916
1931
|
"_special": "select_provider_tts",
|
|
1932
|
+
"condition": {
|
|
1933
|
+
"provider_tts_settings.enable": True,
|
|
1934
|
+
},
|
|
1917
1935
|
},
|
|
1918
1936
|
"provider_settings.image_caption_prompt": {
|
|
1919
1937
|
"description": "图片转述提示词",
|
|
@@ -1983,6 +2001,11 @@ CONFIG_METADATA_3 = {
|
|
|
1983
2001
|
"description": "用户识别",
|
|
1984
2002
|
"type": "bool",
|
|
1985
2003
|
},
|
|
2004
|
+
"provider_settings.group_name_display": {
|
|
2005
|
+
"description": "显示群名称",
|
|
2006
|
+
"type": "bool",
|
|
2007
|
+
"hint": "启用后,在支持的平台(aiocqhttp)上会在 prompt 中包含群名称信息。",
|
|
2008
|
+
},
|
|
1986
2009
|
"provider_settings.datetime_system_prompt": {
|
|
1987
2010
|
"description": "现实世界时间感知",
|
|
1988
2011
|
"type": "bool",
|
|
@@ -1,17 +1,15 @@
|
|
|
1
1
|
import random
|
|
2
2
|
import asyncio
|
|
3
3
|
import math
|
|
4
|
-
import traceback
|
|
5
4
|
import astrbot.core.message.components as Comp
|
|
6
5
|
from typing import Union, AsyncGenerator
|
|
7
6
|
from ..stage import register_stage, Stage
|
|
8
|
-
from ..context import PipelineContext
|
|
7
|
+
from ..context import PipelineContext, call_event_hook
|
|
9
8
|
from astrbot.core.platform.astr_message_event import AstrMessageEvent
|
|
10
9
|
from astrbot.core.message.message_event_result import MessageChain, ResultContentType
|
|
11
10
|
from astrbot.core import logger
|
|
12
|
-
from astrbot.core.message.
|
|
13
|
-
from astrbot.core.star.star_handler import
|
|
14
|
-
from astrbot.core.star.star import star_map
|
|
11
|
+
from astrbot.core.message.components import BaseMessageComponent, ComponentType
|
|
12
|
+
from astrbot.core.star.star_handler import EventType
|
|
15
13
|
from astrbot.core.utils.path_util import path_Mapping
|
|
16
14
|
from astrbot.core.utils.session_lock import session_lock_manager
|
|
17
15
|
|
|
@@ -114,6 +112,43 @@ class RespondStage(Stage):
|
|
|
114
112
|
# 如果所有组件都为空
|
|
115
113
|
return True
|
|
116
114
|
|
|
115
|
+
def is_seg_reply_required(self, event: AstrMessageEvent) -> bool:
|
|
116
|
+
"""检查是否需要分段回复"""
|
|
117
|
+
if not self.enable_seg:
|
|
118
|
+
return False
|
|
119
|
+
|
|
120
|
+
if self.only_llm_result and not event.get_result().is_llm_result():
|
|
121
|
+
return False
|
|
122
|
+
|
|
123
|
+
if event.get_platform_name() in [
|
|
124
|
+
"qq_official",
|
|
125
|
+
"weixin_official_account",
|
|
126
|
+
"dingtalk",
|
|
127
|
+
]:
|
|
128
|
+
return False
|
|
129
|
+
|
|
130
|
+
return True
|
|
131
|
+
|
|
132
|
+
def _extract_comp(
|
|
133
|
+
self,
|
|
134
|
+
raw_chain: list[BaseMessageComponent],
|
|
135
|
+
extract_types: set[ComponentType],
|
|
136
|
+
modify_raw_chain: bool = True,
|
|
137
|
+
):
|
|
138
|
+
extracted = []
|
|
139
|
+
if modify_raw_chain:
|
|
140
|
+
remaining = []
|
|
141
|
+
for comp in raw_chain:
|
|
142
|
+
if comp.type in extract_types:
|
|
143
|
+
extracted.append(comp)
|
|
144
|
+
else:
|
|
145
|
+
remaining.append(comp)
|
|
146
|
+
raw_chain[:] = remaining
|
|
147
|
+
else:
|
|
148
|
+
extracted = [comp for comp in raw_chain if comp.type in extract_types]
|
|
149
|
+
|
|
150
|
+
return extracted
|
|
151
|
+
|
|
117
152
|
async def process(
|
|
118
153
|
self, event: AstrMessageEvent
|
|
119
154
|
) -> Union[None, AsyncGenerator[None, None]]:
|
|
@@ -123,7 +158,14 @@ class RespondStage(Stage):
|
|
|
123
158
|
if result.result_content_type == ResultContentType.STREAMING_FINISH:
|
|
124
159
|
return
|
|
125
160
|
|
|
161
|
+
logger.info(
|
|
162
|
+
f"Prepare to send - {event.get_sender_name()}/{event.get_sender_id()}: {event._outline_chain(result.chain)}"
|
|
163
|
+
)
|
|
164
|
+
|
|
126
165
|
if result.result_content_type == ResultContentType.STREAMING_RESULT:
|
|
166
|
+
if result.async_stream is None:
|
|
167
|
+
logger.warning("async_stream 为空,跳过发送。")
|
|
168
|
+
return
|
|
127
169
|
# 流式结果直接交付平台适配器处理
|
|
128
170
|
use_fallback = self.config.get("provider_settings", {}).get(
|
|
129
171
|
"streaming_segmented", False
|
|
@@ -148,87 +190,71 @@ class RespondStage(Stage):
|
|
|
148
190
|
except Exception as e:
|
|
149
191
|
logger.warning(f"空内容检查异常: {e}")
|
|
150
192
|
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
(self.only_llm_result and result.is_llm_result())
|
|
160
|
-
or not self.only_llm_result
|
|
193
|
+
# 发送消息链
|
|
194
|
+
# Record 需要强制单独发送
|
|
195
|
+
need_separately = {ComponentType.Record}
|
|
196
|
+
if self.is_seg_reply_required(event):
|
|
197
|
+
header_comps = self._extract_comp(
|
|
198
|
+
result.chain,
|
|
199
|
+
{ComponentType.Reply, ComponentType.At},
|
|
200
|
+
modify_raw_chain=True,
|
|
161
201
|
)
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
if isinstance(comp, Comp.At):
|
|
169
|
-
decorated_comps.append(comp)
|
|
170
|
-
result.chain.remove(comp)
|
|
171
|
-
break
|
|
172
|
-
if self.reply_with_quote:
|
|
173
|
-
for comp in result.chain:
|
|
174
|
-
if isinstance(comp, Comp.Reply):
|
|
175
|
-
decorated_comps.append(comp)
|
|
176
|
-
result.chain.remove(comp)
|
|
177
|
-
break
|
|
178
|
-
|
|
179
|
-
# leverage lock to guarentee the order of message sending among different events
|
|
202
|
+
if not result.chain or len(result.chain) == 0:
|
|
203
|
+
# may fix #2670
|
|
204
|
+
logger.warning(
|
|
205
|
+
f"实际消息链为空, 跳过发送阶段。header_chain: {header_comps}, actual_chain: {result.chain}"
|
|
206
|
+
)
|
|
207
|
+
return
|
|
180
208
|
async with session_lock_manager.acquire_lock(event.unified_msg_origin):
|
|
181
|
-
for
|
|
182
|
-
i = await self._calc_comp_interval(rcomp)
|
|
183
|
-
await asyncio.sleep(i)
|
|
184
|
-
try:
|
|
185
|
-
await event.send(MessageChain([rcomp]))
|
|
186
|
-
except Exception as e:
|
|
187
|
-
logger.error(f"发送消息失败: {e} chain: {result.chain}")
|
|
188
|
-
break
|
|
189
|
-
# 分段回复
|
|
190
|
-
for comp in non_record_comps:
|
|
209
|
+
for comp in result.chain:
|
|
191
210
|
i = await self._calc_comp_interval(comp)
|
|
192
211
|
await asyncio.sleep(i)
|
|
193
212
|
try:
|
|
194
|
-
|
|
195
|
-
|
|
213
|
+
if comp.type in need_separately:
|
|
214
|
+
await event.send(MessageChain([comp]))
|
|
215
|
+
else:
|
|
216
|
+
await event.send(MessageChain([*header_comps, comp]))
|
|
217
|
+
header_comps.clear()
|
|
196
218
|
except Exception as e:
|
|
197
|
-
logger.error(
|
|
198
|
-
|
|
219
|
+
logger.error(
|
|
220
|
+
f"发送消息链失败: chain = {MessageChain([comp])}, error = {e}",
|
|
221
|
+
exc_info=True,
|
|
222
|
+
)
|
|
199
223
|
else:
|
|
200
|
-
|
|
224
|
+
if all(
|
|
225
|
+
comp.type in {ComponentType.Reply, ComponentType.At}
|
|
226
|
+
for comp in result.chain
|
|
227
|
+
):
|
|
228
|
+
# may fix #2670
|
|
229
|
+
logger.warning(
|
|
230
|
+
f"消息链全为 Reply 和 At 消息段, 跳过发送阶段。chain: {result.chain}"
|
|
231
|
+
)
|
|
232
|
+
return
|
|
233
|
+
sep_comps = self._extract_comp(
|
|
234
|
+
result.chain,
|
|
235
|
+
need_separately,
|
|
236
|
+
modify_raw_chain=True,
|
|
237
|
+
)
|
|
238
|
+
for comp in sep_comps:
|
|
239
|
+
chain = MessageChain([comp])
|
|
201
240
|
try:
|
|
202
|
-
await event.send(
|
|
241
|
+
await event.send(chain)
|
|
203
242
|
except Exception as e:
|
|
204
|
-
logger.error(
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
EventType.OnAfterMessageSentEvent, plugins_name=event.plugins_name
|
|
218
|
-
)
|
|
219
|
-
for handler in handlers:
|
|
220
|
-
try:
|
|
221
|
-
logger.debug(
|
|
222
|
-
f"hook(on_after_message_sent) -> {star_map[handler.handler_module_path].name} - {handler.handler_name}"
|
|
223
|
-
)
|
|
224
|
-
await handler.handler(event)
|
|
225
|
-
except BaseException:
|
|
226
|
-
logger.error(traceback.format_exc())
|
|
243
|
+
logger.error(
|
|
244
|
+
f"发送消息链失败: chain = {chain}, error = {e}",
|
|
245
|
+
exc_info=True,
|
|
246
|
+
)
|
|
247
|
+
chain = MessageChain(result.chain)
|
|
248
|
+
if result.chain and len(result.chain) > 0:
|
|
249
|
+
try:
|
|
250
|
+
await event.send(chain)
|
|
251
|
+
except Exception as e:
|
|
252
|
+
logger.error(
|
|
253
|
+
f"发送消息链失败: chain = {chain}, error = {e}",
|
|
254
|
+
exc_info=True,
|
|
255
|
+
)
|
|
227
256
|
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
f"{star_map[handler.handler_module_path].name} - {handler.handler_name} 终止了事件传播。"
|
|
231
|
-
)
|
|
232
|
-
return
|
|
257
|
+
if await call_event_hook(event, EventType.OnAfterMessageSentEvent):
|
|
258
|
+
return
|
|
233
259
|
|
|
234
260
|
event.clear_result()
|
|
@@ -55,7 +55,7 @@ class AstrBotMessage:
|
|
|
55
55
|
self_id: str # 机器人的识别id
|
|
56
56
|
session_id: str # 会话id。取决于 unique_session 的设置。
|
|
57
57
|
message_id: str # 消息id
|
|
58
|
-
|
|
58
|
+
group: Group # 群组
|
|
59
59
|
sender: MessageMember # 发送者
|
|
60
60
|
message: List[BaseMessageComponent] # 消息链使用 Nakuru 的消息链格式
|
|
61
61
|
message_str: str # 最直观的纯文本消息字符串
|
|
@@ -64,6 +64,28 @@ class AstrBotMessage:
|
|
|
64
64
|
|
|
65
65
|
def __init__(self) -> None:
|
|
66
66
|
self.timestamp = int(time.time())
|
|
67
|
+
self.group = None
|
|
67
68
|
|
|
68
69
|
def __str__(self) -> str:
|
|
69
70
|
return str(self.__dict__)
|
|
71
|
+
|
|
72
|
+
@property
|
|
73
|
+
def group_id(self) -> str:
|
|
74
|
+
"""
|
|
75
|
+
向后兼容的 group_id 属性
|
|
76
|
+
群组id,如果为私聊,则为空
|
|
77
|
+
"""
|
|
78
|
+
if self.group:
|
|
79
|
+
return self.group.group_id
|
|
80
|
+
return ""
|
|
81
|
+
|
|
82
|
+
@group_id.setter
|
|
83
|
+
def group_id(self, value: str):
|
|
84
|
+
"""设置 group_id"""
|
|
85
|
+
if value:
|
|
86
|
+
if self.group:
|
|
87
|
+
self.group.group_id = value
|
|
88
|
+
else:
|
|
89
|
+
self.group = Group(group_id=value)
|
|
90
|
+
else:
|
|
91
|
+
self.group = None
|
|
@@ -187,6 +187,7 @@ class AiocqhttpAdapter(Platform):
|
|
|
187
187
|
if event["message_type"] == "group":
|
|
188
188
|
abm.type = MessageType.GROUP_MESSAGE
|
|
189
189
|
abm.group_id = str(event.group_id)
|
|
190
|
+
abm.group.group_name = event.get("group_name", "N/A")
|
|
190
191
|
elif event["message_type"] == "private":
|
|
191
192
|
abm.type = MessageType.FRIEND_MESSAGE
|
|
192
193
|
if self.unique_session and abm.type == MessageType.GROUP_MESSAGE:
|
|
@@ -52,10 +52,11 @@ class CommandFilter(HandlerFilter):
|
|
|
52
52
|
# 忽略前两个参数,即 self 和 event
|
|
53
53
|
idx += 1
|
|
54
54
|
continue
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
else:
|
|
55
|
+
# 优先类型注解 其次默认值
|
|
56
|
+
if v.annotation == inspect.Parameter.empty:
|
|
58
57
|
self.handler_params[k] = v.default
|
|
58
|
+
else:
|
|
59
|
+
self.handler_params[k] = v.annotation
|
|
59
60
|
|
|
60
61
|
def get_handler_md(self) -> StarHandlerMetadata:
|
|
61
62
|
return self.handler_md
|
|
@@ -42,10 +42,10 @@ astrbot/core/agent/tool.py,sha256=ZkiyZUP2SdQSncjDCiNMYYi_rYhwtyQYxbiEgeIjvvw,86
|
|
|
42
42
|
astrbot/core/agent/tool_executor.py,sha256=keliOV_lyrI6CALr-MAVCdLE-HjxZh9zygoY61IVkfM,384
|
|
43
43
|
astrbot/core/agent/runners/__init__.py,sha256=KwR34OKGVSQpJ_MaGVP_MX5L1SZ4oU-lv4GuMbSF5Ys,65
|
|
44
44
|
astrbot/core/agent/runners/base.py,sha256=exZS_d2BsrLz-xgeY9ZUPuXikBDUnKxO-dU3ZFQMhRs,1625
|
|
45
|
-
astrbot/core/agent/runners/tool_loop_agent_runner.py,sha256=
|
|
45
|
+
astrbot/core/agent/runners/tool_loop_agent_runner.py,sha256=n_Mm4D289UKHPXVjb6gCq58i0eBsoe81lcTX8G30kkM,13970
|
|
46
46
|
astrbot/core/config/__init__.py,sha256=0CO_3sKtI3WOwWT0k4i6TleWq1SAWJFfB8KjnYB8Zig,172
|
|
47
47
|
astrbot/core/config/astrbot_config.py,sha256=X-b3c5m4msgJrdYFH2LXic5XKY0ViuUMdNZ335zqSBw,6335
|
|
48
|
-
astrbot/core/config/default.py,sha256=
|
|
48
|
+
astrbot/core/config/default.py,sha256=DlbgtiuIMKkjMwlcJ67Do9EUKlONjKMJ0xzJpMDwXtI,117266
|
|
49
49
|
astrbot/core/db/__init__.py,sha256=CAtPQ7lfNSNE4hUylUBWks_49ah2amgYmw1V1lA9FwQ,8291
|
|
50
50
|
astrbot/core/db/po.py,sha256=9MfQf4oEOYCUz7qnCjs4isWkGNpQKhaDVYqKIY8W-l0,7707
|
|
51
51
|
astrbot/core/db/sqlite.py,sha256=F-t2NQr6p63VmuYG6LScFJtnXWNxVT5yWxnbHirJtCw,20138
|
|
@@ -76,14 +76,14 @@ astrbot/core/pipeline/process_stage/stage.py,sha256=2hCX5LdUCzX2RbleMLF_Yqiot9YD
|
|
|
76
76
|
astrbot/core/pipeline/process_stage/method/llm_request.py,sha256=CYDjQtTTDI05O06NPW-_TgD4mW4r1zKm4GwqH-EE49Y,23882
|
|
77
77
|
astrbot/core/pipeline/process_stage/method/star_request.py,sha256=0KWbR0bnVXhMm0CgXnYD_OH3qjbUUvax1UmBWuGiLYU,2454
|
|
78
78
|
astrbot/core/pipeline/rate_limit_check/stage.py,sha256=I_GkpSgioN0-T_catMwpRKtxx-TiMmvu8vV_FE5ORIA,4072
|
|
79
|
-
astrbot/core/pipeline/respond/stage.py,sha256=
|
|
79
|
+
astrbot/core/pipeline/respond/stage.py,sha256=K_CrogwVS1EYNv9oAe3We95QwahPef1S9oBMwd5wdsw,10525
|
|
80
80
|
astrbot/core/pipeline/result_decorate/stage.py,sha256=jGXXtAYyQeo6EHsvrJ56x4rpDBgntXyG5k3kAIt8-Hk,13497
|
|
81
81
|
astrbot/core/pipeline/session_status_check/stage.py,sha256=4STRhoiq4AE544_MVscGHA2FIKUia1CPHV1TKFKTs9U,838
|
|
82
82
|
astrbot/core/pipeline/waking_check/stage.py,sha256=yNC726wHhf1zf5WEvWn47hDUjj_U2vsYgcwTYIvRiSo,7946
|
|
83
83
|
astrbot/core/pipeline/whitelist_check/stage.py,sha256=VcmLs0VfmspNTsitL_WrZXfv2lR2Nktrb5JEWc1VJuw,2403
|
|
84
84
|
astrbot/core/platform/__init__.py,sha256=jQ4UiThp7cDHfmIXAgBDodET87onl7mjii0CAD3RXTY,361
|
|
85
85
|
astrbot/core/platform/astr_message_event.py,sha256=q1bf4g7BnZKWF36Htik3lO8ZPMU-ptWbGnI5s4X6LEQ,14103
|
|
86
|
-
astrbot/core/platform/astrbot_message.py,sha256=
|
|
86
|
+
astrbot/core/platform/astrbot_message.py,sha256=r7jlUPfaOEh0yCSHaS1KQtYarZ9B4ikqMZwDj-wLv_k,2655
|
|
87
87
|
astrbot/core/platform/manager.py,sha256=-H60fkUtH7uhr4aSm2NJF783o8oeN4HxaiiDxGew4B0,7893
|
|
88
88
|
astrbot/core/platform/message_session.py,sha256=Hitdfb7IK4SohaMFld0s0UlwLDpVw5UPTToh05bvH60,1076
|
|
89
89
|
astrbot/core/platform/message_type.py,sha256=uGn5KN8B_7b9F5nFTpvLAXRlXx2VFHP3JmJjN8cC7fg,261
|
|
@@ -91,7 +91,7 @@ astrbot/core/platform/platform.py,sha256=170_1Y1T5R-3nsu06y3i8Ote7zs8JASnskImp-I
|
|
|
91
91
|
astrbot/core/platform/platform_metadata.py,sha256=VRZSkV7u0OUoSxAXDu5EdEggrmcsbhk_7RUduTasoQo,488
|
|
92
92
|
astrbot/core/platform/register.py,sha256=1cPxysZZ1ggfSPZfsv7Ll6qOVcTmLUw6vgaVRPjpxH8,1701
|
|
93
93
|
astrbot/core/platform/sources/aiocqhttp/aiocqhttp_message_event.py,sha256=PN4h7TjH2UrQZX9bZmI6bGtmXgxHEx5GJREI-Vw0qX4,8036
|
|
94
|
-
astrbot/core/platform/sources/aiocqhttp/aiocqhttp_platform_adapter.py,sha256=
|
|
94
|
+
astrbot/core/platform/sources/aiocqhttp/aiocqhttp_platform_adapter.py,sha256=ke52xqAr5JzjfGr0X3thL5Ed9VqfShMxeBRJp1KbRRs,16716
|
|
95
95
|
astrbot/core/platform/sources/dingtalk/dingtalk_adapter.py,sha256=unEkE_KBwCLn9mOBs49WMUKqk8ddpaKN8MMyYep6rhg,8514
|
|
96
96
|
astrbot/core/platform/sources/dingtalk/dingtalk_event.py,sha256=CYTVhpiIedNdLQxjKJlK26GxSWZGlUFNbxZZ5i3tM4o,2672
|
|
97
97
|
astrbot/core/platform/sources/discord/client.py,sha256=mNAE81bYJSvdhbSXrR7MDZIqtGEqDYynpRCGZNf9-ag,4592
|
|
@@ -165,7 +165,7 @@ astrbot/core/star/star_manager.py,sha256=QkMnNhchj2-5bYT_TLeHt3It4UCV6wJvf8svubr
|
|
|
165
165
|
astrbot/core/star/star_tools.py,sha256=A16aeLU78_BBOkfPQSOp1PPhg6krnP6ymKLiBUetLnQ,10795
|
|
166
166
|
astrbot/core/star/updator.py,sha256=lHKLVE1mXBkkH0FpwJ8h23U9xJ9CsB1zo8rgZvADp88,3010
|
|
167
167
|
astrbot/core/star/filter/__init__.py,sha256=xhdp6MMbBJbCHDDtBcAzWZ86DSFTPKzj8RpE2Cdb8ls,469
|
|
168
|
-
astrbot/core/star/filter/command.py,sha256=
|
|
168
|
+
astrbot/core/star/filter/command.py,sha256=lWcZPnmyWKFtflMe8JjPZbvImfqGMLwuUukdPEcrSU8,6963
|
|
169
169
|
astrbot/core/star/filter/command_group.py,sha256=XPONNccFEJeiRzryjySY28x3eS9cLzSDjObbQgI_xOI,4696
|
|
170
170
|
astrbot/core/star/filter/custom_filter.py,sha256=UPEfr-vYJR1NsLOp75A8Oa8RFkluEC3rkzbHM2ct0ek,2238
|
|
171
171
|
astrbot/core/star/filter/event_message_type.py,sha256=R45Buoy9YALxnY6oanFlZMLfSZex2NAHPsl8DFSI_2Y,1162
|
|
@@ -212,8 +212,8 @@ astrbot/dashboard/routes/static_file.py,sha256=7KnNcOb1BVqSTft114LhGsDkfg69X2jHE
|
|
|
212
212
|
astrbot/dashboard/routes/t2i.py,sha256=scp05AxoJM9cubrkSMBu1BbIWP1BMS50eFEPZ9S6WKM,8893
|
|
213
213
|
astrbot/dashboard/routes/tools.py,sha256=FvWgjzImgeIGFWJM_r2tku3UTj0J5LwZXfmZJxfJWHM,13975
|
|
214
214
|
astrbot/dashboard/routes/update.py,sha256=vhG6ET0GJNLTpfkKABYf3Aq5ChUCID1BvoZissWRBZg,6517
|
|
215
|
-
astrbot-4.1.
|
|
216
|
-
astrbot-4.1.
|
|
217
|
-
astrbot-4.1.
|
|
218
|
-
astrbot-4.1.
|
|
219
|
-
astrbot-4.1.
|
|
215
|
+
astrbot-4.1.3.dist-info/METADATA,sha256=MId2DI3KOUAukQo1NT32r3JxhAeHt7ATzfzvyL4JA-w,10921
|
|
216
|
+
astrbot-4.1.3.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
217
|
+
astrbot-4.1.3.dist-info/entry_points.txt,sha256=OEF09YmhBWYuViXrvTLLpstF4ccmNwDL8r7nnFD0pfI,53
|
|
218
|
+
astrbot-4.1.3.dist-info/licenses/LICENSE,sha256=zPfQj5Mq8-gThIiBcxETr7t8gND9bZWOjTGQAr80TQI,34500
|
|
219
|
+
astrbot-4.1.3.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|