mirror of
https://github.com/openclaw/openclaw.git
synced 2026-04-15 11:11:09 +00:00
59 lines
1.9 KiB
TypeScript
59 lines
1.9 KiB
TypeScript
import { createActionGate } from "openclaw/plugin-sdk/channel-actions";
|
|
import type { ChannelMessageActionName } from "openclaw/plugin-sdk/channel-contract";
|
|
import type { OpenClawConfig } from "openclaw/plugin-sdk/config-runtime";
|
|
import { extractToolSend, type ChannelToolSend } from "openclaw/plugin-sdk/tool-send";
|
|
import { listEnabledSlackAccounts, resolveSlackAccount } from "./accounts.js";
|
|
|
|
export function listSlackMessageActions(
|
|
cfg: OpenClawConfig,
|
|
accountId?: string | null,
|
|
): ChannelMessageActionName[] {
|
|
const accounts = (
|
|
accountId ? [resolveSlackAccount({ cfg, accountId })] : listEnabledSlackAccounts(cfg)
|
|
).filter((account) => account.enabled && account.botTokenSource !== "none");
|
|
if (accounts.length === 0) {
|
|
return [];
|
|
}
|
|
|
|
const isActionEnabled = (key: string, defaultValue = true) => {
|
|
for (const account of accounts) {
|
|
const gate = createActionGate(
|
|
(account.actions ?? cfg.channels?.slack?.actions) as Record<string, boolean | undefined>,
|
|
);
|
|
if (gate(key, defaultValue)) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
};
|
|
|
|
const actions = new Set<ChannelMessageActionName>(["send"]);
|
|
if (isActionEnabled("reactions")) {
|
|
actions.add("react");
|
|
actions.add("reactions");
|
|
}
|
|
if (isActionEnabled("messages")) {
|
|
actions.add("read");
|
|
actions.add("edit");
|
|
actions.add("delete");
|
|
actions.add("download-file");
|
|
actions.add("upload-file");
|
|
}
|
|
if (isActionEnabled("pins")) {
|
|
actions.add("pin");
|
|
actions.add("unpin");
|
|
actions.add("list-pins");
|
|
}
|
|
if (isActionEnabled("memberInfo")) {
|
|
actions.add("member-info");
|
|
}
|
|
if (isActionEnabled("emojiList")) {
|
|
actions.add("emoji-list");
|
|
}
|
|
return Array.from(actions);
|
|
}
|
|
|
|
export function extractSlackToolSend(args: Record<string, unknown>): ChannelToolSend | null {
|
|
return extractToolSend(args, "sendMessage");
|
|
}
|