Skip to content

Commit 9a95607

Browse files
committed
refactor: 即使消息链中有消息发送失败了,也尽可能将其他消息发送出去,并把报错信息也发送出去
1 parent 6c245c0 commit 9a95607

2 files changed

Lines changed: 33 additions & 14 deletions

File tree

astrbot/core/platform/sources/kook/kook_client.py

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -332,16 +332,18 @@ async def send_text(
332332
async with self._http_client.post(url, json=payload) as resp:
333333
if resp.status == 200:
334334
result = await resp.json()
335-
if result.get("code") == 0:
336-
logger.info("[KOOK] 发送消息成功")
337-
else:
338-
logger.error(
339-
f'[KOOK] 发送kook消息类型 "{kook_message_type.name}" 失败: {result}'
335+
if result.get("code") != 0:
336+
raise RuntimeError(
337+
f'发送kook消息类型 "{kook_message_type.name}" 失败: {result}'
340338
)
339+
# else:
340+
# logger.info("[KOOK] 发送消息成功")
341341
else:
342-
logger.error(
343-
f'[KOOK] 发送kook消息类型 "{kook_message_type.name}" HTTP错误: {resp.status} , 响应内容 : {await resp.text()}'
342+
raise RuntimeError(
343+
f'发送kook消息类型 "{kook_message_type.name}" HTTP错误: {resp.status} , 响应内容 : {await resp.text()}'
344344
)
345+
except RuntimeError:
346+
raise
345347
except Exception as e:
346348
logger.error(
347349
f'[KOOK] 发送kook消息类型 "{kook_message_type.name}" 异常: {e}'

astrbot/core/platform/sources/kook/kook_event.py

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -164,18 +164,35 @@ async def send(self, message: MessageChain):
164164
# order_messages.sort(key=lambda x: 0 if x.reply_id else 1)
165165

166166
reply_id: str | int = ""
167+
# TODO 暂时用不了 ExceptionGroup,
168+
# 因为pyproject的target-version是"py3.10"
169+
errors: list[Exception] = []
167170
for item in order_messages:
168171
if item.reply_id:
169172
reply_id = item.reply_id
170173
if not item.text:
171174
logger.debug(f'[Kook] 跳过空消息,类型为"{item.type}"')
172175
continue
173-
await self.client.send_text(
174-
self.channel_id,
175-
item.text,
176-
self.astrbot_message_type,
177-
item.type,
178-
reply_id,
179-
)
176+
try:
177+
await self.client.send_text(
178+
self.channel_id,
179+
item.text,
180+
self.astrbot_message_type,
181+
item.type,
182+
reply_id,
183+
)
184+
except RuntimeError as exp:
185+
await self.client.send_text(
186+
self.channel_id,
187+
str(exp),
188+
self.astrbot_message_type,
189+
KookMessageType.TEXT,
190+
reply_id,
191+
)
192+
errors.append(exp)
193+
194+
if errors:
195+
err_msg = "\n".join([str(err) for err in errors])
196+
logger.error(f"[kook] {err_msg}")
180197

181198
await super().send(message)

0 commit comments

Comments
 (0)