From 967198fae0a90d3177cf1103b634a9305f04e031 Mon Sep 17 00:00:00 2001 From: Soulter <905617992@qq.com> Date: Thu, 10 Apr 2025 17:12:26 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20feat:=20=E6=94=AF=E6=8C=81=E9=A3=9E?= =?UTF-8?q?=E4=B9=A6=E5=B9=B3=E5=8F=B0=E4=B8=8B=E4=B8=BB=E5=8A=A8=E6=B6=88?= =?UTF-8?q?=E6=81=AF=E5=8F=91=E9=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fixes: #1177 WARNING: 这个修复会导致开启对话隔离下飞书群组的对话记录丢失(但没有被删除)。 --- .../platform/sources/lark/lark_adapter.py | 42 ++++++++++++++++++- 1 file changed, 40 insertions(+), 2 deletions(-) diff --git a/astrbot/core/platform/sources/lark/lark_adapter.py b/astrbot/core/platform/sources/lark/lark_adapter.py index 8ea2ce36b..4a7ca0966 100644 --- a/astrbot/core/platform/sources/lark/lark_adapter.py +++ b/astrbot/core/platform/sources/lark/lark_adapter.py @@ -2,6 +2,7 @@ import base64 import asyncio import json import re +import uuid import astrbot.api.message_components as Comp from astrbot.api.platform import ( @@ -66,7 +67,41 @@ class LarkPlatformAdapter(Platform): async def send_by_session( self, session: MessageSesion, message_chain: MessageChain ): - raise NotImplementedError("Lark 适配器不支持 send_by_session") + res = await LarkMessageEvent._convert_to_lark(message_chain, self.lark_api) + wrapped = { + "zh_cn": { + "title": "", + "content": res, + } + } + + if session.message_type == MessageType.GROUP_MESSAGE: + id_type = "chat_id" + if "%" in session.session_id: + session.session_id = session.session_id.split("%")[1] + else: + id_type = "open_id" + + request = ( + CreateMessageRequest.builder() + .receive_id_type(id_type) + .request_body( + CreateMessageRequestBody.builder() + .receive_id(session.session_id) + .content(json.dumps(wrapped)) + .msg_type("post") + .uuid(str(uuid.uuid4())) + .build() + ) + .build() + ) + + response = await self.lark_api.im.v1.message.acreate(request) + + if not response.success(): + logger.error(f"发送飞书消息失败({response.code}): {response.msg}") + + await super().send_by_session(session, message_chain) def meta(self) -> PlatformMetadata: return PlatformMetadata( @@ -166,7 +201,10 @@ class LarkPlatformAdapter(Platform): else: abm.session_id = abm.sender.user_id else: - abm.session_id = abm.sender.user_id + if abm.type == MessageType.GROUP_MESSAGE: + abm.session_id = f"{abm.sender.user_id}%{abm.group_id}" # 也保留群组id + else: + abm.session_id = abm.sender.user_id logger.debug(abm) await self.handle_msg(abm)