mirror of
https://github.com/openclaw/openclaw.git
synced 2026-04-09 08:11:09 +00:00
47 lines
1.9 KiB
TypeScript
47 lines
1.9 KiB
TypeScript
import {
|
|
listInspectedDirectoryEntriesFromSources,
|
|
type DirectoryConfigParams,
|
|
} from "openclaw/plugin-sdk/directory-runtime";
|
|
import { inspectSlackAccount, type InspectedSlackAccount } from "./account-inspect.js";
|
|
import { parseSlackTarget } from "./targets.js";
|
|
|
|
export async function listSlackDirectoryPeersFromConfig(params: DirectoryConfigParams) {
|
|
return listInspectedDirectoryEntriesFromSources({
|
|
...params,
|
|
kind: "user",
|
|
inspectAccount: (cfg, accountId) =>
|
|
inspectSlackAccount({ cfg, accountId }) as InspectedSlackAccount | null,
|
|
resolveSources: (account) => {
|
|
const allowFrom = account.config.allowFrom ?? account.dm?.allowFrom ?? [];
|
|
const channelUsers = Object.values(account.config.channels ?? {}).flatMap(
|
|
(channel) => channel.users ?? [],
|
|
);
|
|
return [allowFrom, Object.keys(account.config.dms ?? {}), channelUsers];
|
|
},
|
|
normalizeId: (raw) => {
|
|
const mention = raw.match(/^<@([A-Z0-9]+)>$/i);
|
|
const normalizedUserId = (mention?.[1] ?? raw).replace(/^(slack|user):/i, "").trim();
|
|
if (!normalizedUserId) {
|
|
return null;
|
|
}
|
|
const target = `user:${normalizedUserId}`;
|
|
const normalized = parseSlackTarget(target, { defaultKind: "user" });
|
|
return normalized?.kind === "user" ? `user:${normalized.id.toLowerCase()}` : null;
|
|
},
|
|
});
|
|
}
|
|
|
|
export async function listSlackDirectoryGroupsFromConfig(params: DirectoryConfigParams) {
|
|
return listInspectedDirectoryEntriesFromSources({
|
|
...params,
|
|
kind: "group",
|
|
inspectAccount: (cfg, accountId) =>
|
|
inspectSlackAccount({ cfg, accountId }) as InspectedSlackAccount | null,
|
|
resolveSources: (account) => [Object.keys(account.config.channels ?? {})],
|
|
normalizeId: (raw) => {
|
|
const normalized = parseSlackTarget(raw, { defaultKind: "channel" });
|
|
return normalized?.kind === "channel" ? `channel:${normalized.id.toLowerCase()}` : null;
|
|
},
|
|
});
|
|
}
|