mirror of
https://github.com/openclaw/openclaw.git
synced 2026-07-21 00:31:39 +00:00
39 lines
1.2 KiB
TypeScript
39 lines
1.2 KiB
TypeScript
// Slack plugin module implements account reply mode behavior.
|
|
import type { SlackAccountConfig } from "./runtime-api.js";
|
|
|
|
type SlackReplyToMode = "off" | "first" | "all" | "batched";
|
|
|
|
type SlackReplyToModeAccount = {
|
|
replyToMode?: SlackReplyToMode;
|
|
replyToModeByChatType?: SlackAccountConfig["replyToModeByChatType"];
|
|
dm?: { replyToMode?: SlackReplyToMode };
|
|
};
|
|
|
|
function normalizeSlackChatType(raw?: string): "direct" | "group" | "channel" | undefined {
|
|
const value = raw?.trim().toLowerCase();
|
|
if (!value) {
|
|
return undefined;
|
|
}
|
|
if (value === "direct" || value === "dm") {
|
|
return "direct";
|
|
}
|
|
if (value === "group" || value === "channel") {
|
|
return value;
|
|
}
|
|
return undefined;
|
|
}
|
|
|
|
export function resolveSlackReplyToMode(
|
|
account: SlackReplyToModeAccount,
|
|
chatType?: string | null,
|
|
): SlackReplyToMode {
|
|
const normalized = normalizeSlackChatType(chatType ?? undefined);
|
|
if (normalized && account.replyToModeByChatType?.[normalized] !== undefined) {
|
|
return account.replyToModeByChatType[normalized] ?? "off";
|
|
}
|
|
if (normalized === "direct" && account.dm?.replyToMode !== undefined) {
|
|
return account.dm.replyToMode;
|
|
}
|
|
return account.replyToMode ?? "off";
|
|
}
|