Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 | import type { ClawdbotConfig } from "openclaw/plugin-sdk"; import { resolveDingtalkAccount } from "./config/accounts.ts"; import { normalizeDingtalkTarget } from "./targets.ts"; export type DingtalkDirectoryPeer = { kind: "user"; id: string; name?: string; }; export type DingtalkDirectoryGroup = { kind: "group"; id: string; name?: string; }; export async function listDingtalkDirectoryPeers(params: { cfg: ClawdbotConfig; query?: string; limit?: number; accountId?: string; }): Promise<DingtalkDirectoryPeer[]> { const account = resolveDingtalkAccount({ cfg: params.cfg, accountId: params.accountId }); const dingtalkCfg = account.config; const q = params.query?.trim().toLowerCase() || ""; const ids = new Set<string>(); for (const entry of dingtalkCfg?.allowFrom ?? []) { const trimmed = String(entry).trim(); if (trimmed && trimmed !== "*") { ids.add(trimmed); } } return Array.from(ids) .map((raw) => raw.trim()) .filter(Boolean) .map((raw) => normalizeDingtalkTarget(raw) ?? raw) .filter((id) => (q ? id.toLowerCase().includes(q) : true)) .slice(0, params.limit && params.limit > 0 ? params.limit : undefined) .map((id) => ({ kind: "user" as const, id })); } export async function listDingtalkDirectoryGroups(params: { cfg: ClawdbotConfig; query?: string; limit?: number; accountId?: string; }): Promise<DingtalkDirectoryGroup[]> { const account = resolveDingtalkAccount({ cfg: params.cfg, accountId: params.accountId }); const dingtalkCfg = account.config; const q = params.query?.trim().toLowerCase() || ""; const ids = new Set<string>(); for (const groupId of Object.keys(dingtalkCfg?.groups ?? {})) { const trimmed = groupId.trim(); if (trimmed && trimmed !== "*") { ids.add(trimmed); } } for (const entry of dingtalkCfg?.groupAllowFrom ?? []) { const trimmed = String(entry).trim(); if (trimmed && trimmed !== "*") { ids.add(trimmed); } } return Array.from(ids) .map((raw) => raw.trim()) .filter(Boolean) .filter((id) => (q ? id.toLowerCase().includes(q) : true)) .slice(0, params.limit && params.limit > 0 ? params.limit : undefined) .map((id) => ({ kind: "group" as const, id })); } export async function listDingtalkDirectoryPeersLive(params: { cfg: ClawdbotConfig; query?: string; limit?: number; accountId?: string; }): Promise<DingtalkDirectoryPeer[]> { // DingTalk doesn't have a public API to list users, so we fall back to static list return listDingtalkDirectoryPeers(params); } export async function listDingtalkDirectoryGroupsLive(params: { cfg: ClawdbotConfig; query?: string; limit?: number; accountId?: string; }): Promise<DingtalkDirectoryGroup[]> { // DingTalk doesn't have a public API to list groups, so we fall back to static list return listDingtalkDirectoryGroups(params); } |