import { resolveOutboundSendDep } from "openclaw/plugin-sdk/channel-runtime"; import type { ChannelOutboundAdapter } from "../runtime-api.js"; import { sendMessageMatrix, sendPollMatrix } from "./matrix/send.js"; import { getMatrixRuntime } from "./runtime.js"; export const matrixOutbound: ChannelOutboundAdapter = { deliveryMode: "direct", chunker: (text, limit) => getMatrixRuntime().channel.text.chunkMarkdownText(text, limit), chunkerMode: "markdown", textChunkLimit: 4000, sendText: async ({ cfg, to, text, deps, replyToId, threadId, accountId }) => { const send = resolveOutboundSendDep(deps, "matrix") ?? sendMessageMatrix; const resolvedThreadId = threadId !== undefined && threadId !== null ? String(threadId) : undefined; const result = await send(to, text, { cfg, replyToId: replyToId ?? undefined, threadId: resolvedThreadId, accountId: accountId ?? undefined, }); return { channel: "matrix", messageId: result.messageId, roomId: result.roomId, }; }, sendMedia: async ({ cfg, to, text, mediaUrl, deps, replyToId, threadId, accountId }) => { const send = resolveOutboundSendDep(deps, "matrix") ?? sendMessageMatrix; const resolvedThreadId = threadId !== undefined && threadId !== null ? String(threadId) : undefined; const result = await send(to, text, { cfg, mediaUrl, replyToId: replyToId ?? undefined, threadId: resolvedThreadId, accountId: accountId ?? undefined, }); return { channel: "matrix", messageId: result.messageId, roomId: result.roomId, }; }, sendPoll: async ({ cfg, to, poll, threadId, accountId }) => { const resolvedThreadId = threadId !== undefined && threadId !== null ? String(threadId) : undefined; const result = await sendPollMatrix(to, poll, { cfg, threadId: resolvedThreadId, accountId: accountId ?? undefined, }); return { channel: "matrix", messageId: result.eventId, roomId: result.roomId, pollId: result.eventId, }; }, };