

















@@ -64,7 +64,7 @@ function parseCommandName(body: string | undefined): string | undefined {
6464return normalizeOptionalString(name);
6565}
666667-function commandTurnKindToSource(kind: CommandTurnKind): CommandTurnSource {
67+export function commandTurnKindToSource(kind: CommandTurnKind): CommandTurnSource {
6868if (kind === "native") {
6969return "native";
7070}
@@ -82,7 +82,7 @@ function normalizeCommandTurnSource(value: unknown): CommandTurnSource | undefin
8282return value === "native" || value === "text" || value === "message" ? value : undefined;
8383}
848485-function sourceToCommandTurnKind(source: CommandTurnSource): CommandTurnKind {
85+export function commandTurnSourceToKind(source: CommandTurnSource): CommandTurnKind {
8686if (source === "native") {
8787return "native";
8888}
@@ -92,7 +92,7 @@ function sourceToCommandTurnKind(source: CommandTurnSource): CommandTurnKind {
9292return "normal";
9393}
949495-function buildCommandTurnContext(
95+export function createCommandTurnContext(
9696source: CommandTurnSource,
9797input: {
9898authorized: boolean;
@@ -138,15 +138,15 @@ function normalizeExplicitCommandTurn(
138138const kind = normalizeCommandTurnKind(record.kind);
139139const source =
140140normalizeCommandTurnSource(record.source) ?? (kind ? commandTurnKindToSource(kind) : undefined);
141-const resolvedKind = kind ?? (source ? sourceToCommandTurnKind(source) : undefined);
141+const resolvedKind = kind ?? (source ? commandTurnSourceToKind(source) : undefined);
142142if (kind && source && commandTurnKindToSource(kind) !== source) {
143143return undefined;
144144}
145145if (!resolvedKind || !source) {
146146return undefined;
147147}
148148const body = normalizeOptionalString(record.body) ?? resolveCommandBody(input);
149-return buildCommandTurnContext(source, {
149+return createCommandTurnContext(source, {
150150authorized:
151151resolvedKind === "normal"
152152 ? false
@@ -170,16 +170,50 @@ export function resolveCommandTurnContext(input: CommandTurnContextInput): Comma
170170 ? "text"
171171 : "message";
172172const body = resolveCommandBody(input);
173-const kind = sourceToCommandTurnKind(source);
174-return buildCommandTurnContext(source, {
173+const kind = commandTurnSourceToKind(source);
174+return createCommandTurnContext(source, {
175175authorized: kind === "normal" ? false : input.CommandAuthorized === true,
176176commandName: parseCommandName(body),
177177 body,
178178});
179179}
180180181-export function isExplicitCommandTurn(commandTurn: CommandTurnContext): boolean {
181+export function isNativeCommandTurn(commandTurn: CommandTurnContext | undefined): boolean {
182+return commandTurn?.kind === "native";
183+}
184+185+export function isTextSlashCommandTurn(commandTurn: CommandTurnContext | undefined): boolean {
186+return commandTurn?.kind === "text-slash";
187+}
188+189+export function isAuthorizedTextSlashCommandTurn(
190+commandTurn: CommandTurnContext | undefined,
191+): boolean {
192+return commandTurn?.kind === "text-slash" && commandTurn.authorized;
193+}
194+195+export function isExplicitCommandTurn(commandTurn: CommandTurnContext | undefined): boolean {
182196return (
183-commandTurn.kind === "native" || (commandTurn.kind === "text-slash" && commandTurn.authorized)
197+commandTurn?.kind === "native" || (commandTurn?.kind === "text-slash" && commandTurn.authorized)
184198);
185199}
200+201+export function resolveCommandTurnTargetSessionKey(input: {
202+CommandTurn?: CommandTurnContext;
203+CommandSource?: unknown;
204+CommandAuthorized?: unknown;
205+CommandBody?: unknown;
206+BodyForCommands?: unknown;
207+RawBody?: unknown;
208+Body?: unknown;
209+CommandTargetSessionKey?: unknown;
210+}): string | undefined {
211+if (
212+!isNativeCommandTurn(resolveCommandTurnContext(input)) ||
213+typeof input.CommandTargetSessionKey !== "string"
214+) {
215+return undefined;
216+}
217+const trimmed = input.CommandTargetSessionKey.trim();
218+return trimmed.length > 0 ? trimmed : undefined;
219+}
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。