diff --git a/src/channels/targets.ts b/src/channels/targets.ts index dcf9012fdca..49ec74f3f6f 100644 --- a/src/channels/targets.ts +++ b/src/channels/targets.ts @@ -67,6 +67,23 @@ export function parseTargetPrefix(params: { return id ? buildMessagingTarget(params.kind, id, params.raw) : undefined; } +export function parseTargetPrefixes(params: { + raw: string; + prefixes: Array<{ prefix: string; kind: MessagingTargetKind }>; +}): MessagingTarget | undefined { + for (const entry of params.prefixes) { + const parsed = parseTargetPrefix({ + raw: params.raw, + prefix: entry.prefix, + kind: entry.kind, + }); + if (parsed) { + return parsed; + } + } + return undefined; +} + export function requireTargetKind(params: { platform: string; target: MessagingTarget | undefined; diff --git a/src/discord/targets.ts b/src/discord/targets.ts index eabed546a2a..6f8fd85039f 100644 --- a/src/discord/targets.ts +++ b/src/discord/targets.ts @@ -3,7 +3,7 @@ import { buildMessagingTarget, ensureTargetId, parseTargetMention, - parseTargetPrefix, + parseTargetPrefixes, requireTargetKind, type MessagingTarget, type MessagingTargetKind, @@ -33,22 +33,14 @@ export function parseDiscordTarget( if (mentionTarget) { return mentionTarget; } - const prefixedTarget = - parseTargetPrefix({ - raw: trimmed, - prefix: "user:", - kind: "user", - }) ?? - parseTargetPrefix({ - raw: trimmed, - prefix: "channel:", - kind: "channel", - }) ?? - parseTargetPrefix({ - raw: trimmed, - prefix: "discord:", - kind: "user", - }); + const prefixedTarget = parseTargetPrefixes({ + raw: trimmed, + prefixes: [ + { prefix: "user:", kind: "user" }, + { prefix: "channel:", kind: "channel" }, + { prefix: "discord:", kind: "user" }, + ], + }); if (prefixedTarget) { return prefixedTarget; } diff --git a/src/slack/targets.ts b/src/slack/targets.ts index 2d931984938..d12bc605ec4 100644 --- a/src/slack/targets.ts +++ b/src/slack/targets.ts @@ -2,7 +2,7 @@ import { buildMessagingTarget, ensureTargetId, parseTargetMention, - parseTargetPrefix, + parseTargetPrefixes, requireTargetKind, type MessagingTarget, type MessagingTargetKind, @@ -31,22 +31,14 @@ export function parseSlackTarget( if (mentionTarget) { return mentionTarget; } - const prefixedTarget = - parseTargetPrefix({ - raw: trimmed, - prefix: "user:", - kind: "user", - }) ?? - parseTargetPrefix({ - raw: trimmed, - prefix: "channel:", - kind: "channel", - }) ?? - parseTargetPrefix({ - raw: trimmed, - prefix: "slack:", - kind: "user", - }); + const prefixedTarget = parseTargetPrefixes({ + raw: trimmed, + prefixes: [ + { prefix: "user:", kind: "user" }, + { prefix: "channel:", kind: "channel" }, + { prefix: "slack:", kind: "user" }, + ], + }); if (prefixedTarget) { return prefixedTarget; }