import type { OpenClawConfig } from "openclaw/plugin-sdk/config-runtime" ;
import {
deriveLastRoutePolicy,
resolveAgentRoute,
type ResolvedAgentRoute,
type RoutePeer,
} from "openclaw/plugin-sdk/routing" ;
import { resolveAgentIdFromSessionKey } from "openclaw/plugin-sdk/routing" ;
export function buildDiscordRoutePeer(params: {
isDirectMessage: boolean ;
isGroupDm: boolean ;
directUserId?: string | null ;
conversationId: string;
}): RoutePeer {
return {
kind: params.isDirectMessage ? "direct" : params.isGroupDm ? "group" : "channel" ,
id: params.isDirectMessage
? params.directUserId?.trim() || params.conversationId
: params.conversationId,
};
}
export function resolveDiscordConversationRoute(params: {
cfg: OpenClawConfig;
accountId?: string | null ;
guildId?: string | null ;
memberRoleIds?: string[];
peer: RoutePeer;
parentConversationId?: string | null ;
}): ResolvedAgentRoute {
return resolveAgentRoute({
cfg: params.cfg,
channel: "discord" ,
accountId: params.accountId,
guildId: params.guildId ?? undefined,
memberRoleIds: params.memberRoleIds,
peer: params.peer,
parentPeer: params.parentConversationId
? { kind: "channel" , id: params.parentConversationId }
: undefined,
});
}
export function resolveDiscordBoundConversationRoute(params: {
cfg: OpenClawConfig;
accountId?: string | null ;
guildId?: string | null ;
memberRoleIds?: string[];
isDirectMessage: boolean ;
isGroupDm: boolean ;
directUserId?: string | null ;
conversationId: string;
parentConversationId?: string | null ;
boundSessionKey?: string | null ;
configuredRoute?: { route: ResolvedAgentRoute } | null ;
matchedBy?: ResolvedAgentRoute["matchedBy" ];
}): ResolvedAgentRoute {
const route = resolveDiscordConversationRoute({
cfg: params.cfg,
accountId: params.accountId,
guildId: params.guildId,
memberRoleIds: params.memberRoleIds,
peer: buildDiscordRoutePeer({
isDirectMessage: params.isDirectMessage,
isGroupDm: params.isGroupDm,
directUserId: params.directUserId,
conversationId: params.conversationId,
}),
parentConversationId: params.parentConversationId,
});
return resolveDiscordEffectiveRoute({
route,
boundSessionKey: params.boundSessionKey,
configuredRoute: params.configuredRoute,
matchedBy: params.matchedBy,
});
}
export function resolveDiscordEffectiveRoute(params: {
route: ResolvedAgentRoute;
boundSessionKey?: string | null ;
configuredRoute?: { route: ResolvedAgentRoute } | null ;
matchedBy?: ResolvedAgentRoute["matchedBy" ];
}): ResolvedAgentRoute {
const boundSessionKey = params.boundSessionKey?.trim();
if (!boundSessionKey) {
return params.configuredRoute?.route ?? params.route;
}
return {
...params.route,
sessionKey: boundSessionKey,
agentId: resolveAgentIdFromSessionKey(boundSessionKey),
lastRoutePolicy: deriveLastRoutePolicy({
sessionKey: boundSessionKey,
mainSessionKey: params.route.mainSessionKey,
}),
...(params.matchedBy ? { matchedBy: params.matchedBy } : {}),
};
}
Messung V0.5 in Prozent C=98 H=97 G=97
¤ Dauer der Verarbeitung: 0.15 Sekunden
¤
*© Formatika GbR, Deutschland