Files
clawdbot/src/infra/outbound/channel-target.ts
2026-01-17 06:45:11 +00:00

38 lines
1.3 KiB
TypeScript

import { MESSAGE_ACTION_TARGET_MODE } from "./message-action-spec.js";
export const CHANNEL_TARGET_DESCRIPTION =
"Recipient/channel: E.164 for WhatsApp/Signal, Telegram chat id/@username, Discord/Slack channel/user, or iMessage handle/chat_id";
export const CHANNEL_TARGETS_DESCRIPTION =
"Recipient/channel targets (same format as --target); accepts ids or names when the directory is available.";
export function applyTargetToParams(params: {
action: string;
args: Record<string, unknown>;
}): void {
const target = typeof params.args.target === "string" ? params.args.target.trim() : "";
const hasLegacyTo = typeof params.args.to === "string";
const hasLegacyChannelId = typeof params.args.channelId === "string";
const mode =
MESSAGE_ACTION_TARGET_MODE[params.action as keyof typeof MESSAGE_ACTION_TARGET_MODE] ?? "none";
if (mode !== "none") {
if (hasLegacyTo || hasLegacyChannelId) {
throw new Error("Use `target` instead of `to`/`channelId`.");
}
} else if (hasLegacyTo) {
throw new Error("Use `target` for actions that accept a destination.");
}
if (!target) return;
if (mode === "channelId") {
params.args.channelId = target;
return;
}
if (mode === "to") {
params.args.to = target;
return;
}
throw new Error(`Action ${params.action} does not accept a target.`);
}