UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

98 lines (97 loc) 3.29 kB
import { s as normalizeOptionalLowercaseString } from "./string-coerce-mnp54Vah.js"; import "./string-coerce-runtime-CEGJWkQ_.js"; import { t as normalizeDiscordToken } from "./token-ByxvVRHv.js"; import { s as resolveDiscordAccount } from "./accounts-BI_6uJlY.js"; import { t as rememberDiscordDirectoryUser } from "./directory-cache-DfoYG_5F.js"; import { n as fetchDiscord } from "./api-IrbNzRWx.js"; import { a as normalizeDiscordSlug } from "./allow-list-CBhA2l4a.js"; //#region extensions/discord/src/directory-live.ts function normalizeQuery(value) { return normalizeOptionalLowercaseString(value) ?? ""; } function buildUserRank(user) { return user.bot ? 0 : 1; } function resolveDiscordDirectoryAccess(params) { const account = resolveDiscordAccount({ cfg: params.cfg, accountId: params.accountId }); const token = normalizeDiscordToken(account.token, "channels.discord.token"); if (!token) return null; return { token, query: normalizeQuery(params.query), accountId: account.accountId }; } async function listDiscordGuilds(token) { return (await fetchDiscord("/users/@me/guilds", token)).filter((guild) => guild.id && guild.name); } async function listDiscordDirectoryGroupsLive(params) { const access = resolveDiscordDirectoryAccess(params); if (!access) return []; const { token, query } = access; const guilds = await listDiscordGuilds(token); const rows = []; for (const guild of guilds) { const channels = await fetchDiscord(`/guilds/${guild.id}/channels`, token); for (const channel of channels) { const name = channel.name?.trim(); if (!name) continue; if (query && !normalizeDiscordSlug(name).includes(normalizeDiscordSlug(query))) continue; rows.push({ kind: "group", id: `channel:${channel.id}`, name, handle: `#${name}`, raw: channel }); if (typeof params.limit === "number" && params.limit > 0 && rows.length >= params.limit) return rows; } } return rows; } async function listDiscordDirectoryPeersLive(params) { const access = resolveDiscordDirectoryAccess(params); if (!access) return []; const { token, query, accountId } = access; if (!query) return []; const guilds = await listDiscordGuilds(token); const rows = []; const limit = typeof params.limit === "number" && params.limit > 0 ? params.limit : 25; for (const guild of guilds) { const paramsObj = new URLSearchParams({ query, limit: String(Math.min(limit, 100)) }); const members = await fetchDiscord(`/guilds/${guild.id}/members/search?${paramsObj.toString()}`, token); for (const member of members) { const user = member.user; if (!user?.id) continue; rememberDiscordDirectoryUser({ accountId, userId: user.id, handles: [ user.username, user.global_name, member.nick, user.username ? `@${user.username}` : null ] }); const name = member.nick?.trim() || user.global_name?.trim() || user.username?.trim(); rows.push({ kind: "user", id: `user:${user.id}`, name: name || void 0, handle: user.username ? `@${user.username}` : void 0, rank: buildUserRank(user), raw: member }); if (rows.length >= limit) return rows; } } return rows; } //#endregion export { listDiscordDirectoryPeersLive as n, listDiscordDirectoryGroupsLive as t };