From 45f7ef1bfcd17d7a12a74c537e2ddc06c534671c Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sun, 15 Feb 2026 05:46:20 +0000 Subject: [PATCH] refactor(line): dedupe route resolution --- src/line/bot-message-context.ts | 71 ++++++++++++++++++--------------- 1 file changed, 39 insertions(+), 32 deletions(-) diff --git a/src/line/bot-message-context.ts b/src/line/bot-message-context.ts index eb9badd0d..51b1a5704 100644 --- a/src/line/bot-message-context.ts +++ b/src/line/bot-message-context.ts @@ -60,6 +60,39 @@ function buildPeerId(source: EventSource): string { return "unknown"; } +function resolveLineInboundRoute(params: { + source: EventSource; + cfg: OpenClawConfig; + account: ResolvedLineAccount; +}): { + userId?: string; + groupId?: string; + roomId?: string; + isGroup: boolean; + peerId: string; + route: ReturnType; +} { + recordChannelActivity({ + channel: "line", + accountId: params.account.accountId, + direction: "inbound", + }); + + const { userId, groupId, roomId, isGroup } = getSourceInfo(params.source); + const peerId = buildPeerId(params.source); + const route = resolveAgentRoute({ + cfg: params.cfg, + channel: "line", + accountId: params.account.accountId, + peer: { + kind: isGroup ? "group" : "direct", + id: peerId, + }, + }); + + return { userId, groupId, roomId, isGroup, peerId, route }; +} + // Common LINE sticker package descriptions const STICKER_PACKAGES: Record = { "1": "Moon & James", @@ -299,24 +332,11 @@ async function finalizeLineInboundContext(params: { export async function buildLineMessageContext(params: BuildLineMessageContextParams) { const { event, allMedia, cfg, account } = params; - recordChannelActivity({ - channel: "line", - accountId: account.accountId, - direction: "inbound", - }); - const source = event.source; - const { userId, groupId, roomId, isGroup } = getSourceInfo(source); - const peerId = buildPeerId(source); - - const route = resolveAgentRoute({ + const { userId, groupId, roomId, isGroup, peerId, route } = resolveLineInboundRoute({ + source, cfg, - channel: "line", - accountId: account.accountId, - peer: { - kind: isGroup ? "group" : "direct", - id: peerId, - }, + account, }); const message = event.message; @@ -389,24 +409,11 @@ export async function buildLinePostbackContext(params: { }) { const { event, cfg, account } = params; - recordChannelActivity({ - channel: "line", - accountId: account.accountId, - direction: "inbound", - }); - const source = event.source; - const { userId, groupId, roomId, isGroup } = getSourceInfo(source); - const peerId = buildPeerId(source); - - const route = resolveAgentRoute({ + const { userId, groupId, roomId, isGroup, peerId, route } = resolveLineInboundRoute({ + source, cfg, - channel: "line", - accountId: account.accountId, - peer: { - kind: isGroup ? "group" : "direct", - id: peerId, - }, + account, }); const timestamp = event.timestamp;