mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-28 13:40:41 +00:00
refactor(extensions): reuse shared helper primitives
This commit is contained in:
71
extensions/feishu/src/send-message.ts
Normal file
71
extensions/feishu/src/send-message.ts
Normal file
@@ -0,0 +1,71 @@
|
||||
import { assertFeishuMessageApiSuccess, toFeishuSendResult } from "./send-result.js";
|
||||
|
||||
type FeishuMessageClient = {
|
||||
im: {
|
||||
message: {
|
||||
reply: (params: {
|
||||
path: { message_id: string };
|
||||
data: Record<string, unknown>;
|
||||
}) => Promise<{ code?: number; msg?: string; data?: { message_id?: string } }>;
|
||||
create: (params: {
|
||||
params: { receive_id_type: string };
|
||||
data: Record<string, unknown>;
|
||||
}) => Promise<{ code?: number; msg?: string; data?: { message_id?: string } }>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
export async function sendFeishuMessageWithOptionalReply(params: {
|
||||
client: FeishuMessageClient;
|
||||
receiveId: string;
|
||||
receiveIdType: string;
|
||||
content: string;
|
||||
msgType: string;
|
||||
replyToMessageId?: string;
|
||||
replyInThread?: boolean;
|
||||
sendErrorPrefix: string;
|
||||
replyErrorPrefix: string;
|
||||
fallbackSendErrorPrefix?: string;
|
||||
shouldFallbackFromReply?: (response: { code?: number; msg?: string }) => boolean;
|
||||
}): Promise<{ messageId: string; chatId: string }> {
|
||||
const data = {
|
||||
content: params.content,
|
||||
msg_type: params.msgType,
|
||||
};
|
||||
|
||||
if (params.replyToMessageId) {
|
||||
const response = await params.client.im.message.reply({
|
||||
path: { message_id: params.replyToMessageId },
|
||||
data: {
|
||||
...data,
|
||||
...(params.replyInThread ? { reply_in_thread: true } : {}),
|
||||
},
|
||||
});
|
||||
if (params.shouldFallbackFromReply?.(response)) {
|
||||
const fallback = await params.client.im.message.create({
|
||||
params: { receive_id_type: params.receiveIdType },
|
||||
data: {
|
||||
receive_id: params.receiveId,
|
||||
...data,
|
||||
},
|
||||
});
|
||||
assertFeishuMessageApiSuccess(
|
||||
fallback,
|
||||
params.fallbackSendErrorPrefix ?? params.sendErrorPrefix,
|
||||
);
|
||||
return toFeishuSendResult(fallback, params.receiveId);
|
||||
}
|
||||
assertFeishuMessageApiSuccess(response, params.replyErrorPrefix);
|
||||
return toFeishuSendResult(response, params.receiveId);
|
||||
}
|
||||
|
||||
const response = await params.client.im.message.create({
|
||||
params: { receive_id_type: params.receiveIdType },
|
||||
data: {
|
||||
receive_id: params.receiveId,
|
||||
...data,
|
||||
},
|
||||
});
|
||||
assertFeishuMessageApiSuccess(response, params.sendErrorPrefix);
|
||||
return toFeishuSendResult(response, params.receiveId);
|
||||
}
|
||||
Reference in New Issue
Block a user