Skip to content

Commit 22a109c

Browse files
authored
feat: implement feishu / lark media file handling utilities for file, audio and video processing (#4938)
* feat: implement media file handling utilities for audio and video processing * feat: refactor file upload handling for audio and video in LarkMessageEvent * feat: add cleanup for failed audio and video conversion outputs in media_utils * feat: add utility methods for sending messages and uploading files in LarkMessageEvent
1 parent 6416707 commit 22a109c

3 files changed

Lines changed: 631 additions & 61 deletions

File tree

astrbot/core/platform/sources/lark/lark_adapter.py

Lines changed: 11 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,10 @@
33
import json
44
import re
55
import time
6-
import uuid
76
from typing import Any, cast
87

98
import lark_oapi as lark
109
from lark_oapi.api.im.v1 import (
11-
CreateMessageRequest,
12-
CreateMessageRequestBody,
1310
GetMessageResourceRequest,
1411
)
1512
from lark_oapi.api.im.v1.processor import P2ImMessageReceiveV1Processor
@@ -125,44 +122,23 @@ async def send_by_session(
125122
session: MessageSesion,
126123
message_chain: MessageChain,
127124
):
128-
if self.lark_api.im is None:
129-
logger.error("[Lark] API Client im 模块未初始化,无法发送消息")
130-
return
131-
132-
res = await LarkMessageEvent._convert_to_lark(message_chain, self.lark_api)
133-
wrapped = {
134-
"zh_cn": {
135-
"title": "",
136-
"content": res,
137-
},
138-
}
139-
140125
if session.message_type == MessageType.GROUP_MESSAGE:
141126
id_type = "chat_id"
142-
if "%" in session.session_id:
143-
session.session_id = session.session_id.split("%")[1]
127+
receive_id = session.session_id
128+
if "%" in receive_id:
129+
receive_id = receive_id.split("%")[1]
144130
else:
145131
id_type = "open_id"
146-
147-
request = (
148-
CreateMessageRequest.builder()
149-
.receive_id_type(id_type)
150-
.request_body(
151-
CreateMessageRequestBody.builder()
152-
.receive_id(session.session_id)
153-
.content(json.dumps(wrapped))
154-
.msg_type("post")
155-
.uuid(str(uuid.uuid4()))
156-
.build(),
157-
)
158-
.build()
132+
receive_id = session.session_id
133+
134+
# 复用 LarkMessageEvent 中的通用发送逻辑
135+
await LarkMessageEvent.send_message_chain(
136+
message_chain,
137+
self.lark_api,
138+
receive_id=receive_id,
139+
receive_id_type=id_type,
159140
)
160141

161-
response = await self.lark_api.im.v1.message.acreate(request)
162-
163-
if not response.success():
164-
logger.error(f"发送飞书消息失败({response.code}): {response.msg}")
165-
166142
await super().send_by_session(session, message_chain)
167143

168144
def meta(self) -> PlatformMetadata:

0 commit comments

Comments
 (0)