mirror of https://github.com/openclaw/openclaw.git
refactor(discord): lazy-load channel send seams
This commit is contained in:
parent
e249a852ae
commit
bf1b1d63bd
|
|
@ -38,7 +38,6 @@ import {
|
|||
listDiscordDirectoryGroupsFromConfig,
|
||||
listDiscordDirectoryPeersFromConfig,
|
||||
} from "./directory-config.js";
|
||||
import { listDiscordDirectoryGroupsLive, listDiscordDirectoryPeersLive } from "./directory-live.js";
|
||||
import { shouldSuppressLocalDiscordExecApprovalPrompt } from "./exec-approvals.js";
|
||||
import {
|
||||
resolveDiscordGroupRequireMention,
|
||||
|
|
@ -70,7 +69,6 @@ import {
|
|||
} from "./runtime-api.js";
|
||||
import { getDiscordRuntime } from "./runtime.js";
|
||||
import { collectDiscordSecurityAuditFindings } from "./security-audit.js";
|
||||
import { fetchChannelPermissionsDiscord, sendMessageDiscord, sendPollDiscord } from "./send.js";
|
||||
import { normalizeExplicitDiscordSessionKey } from "./session-key-normalization.js";
|
||||
import { discordSetupAdapter } from "./setup-core.js";
|
||||
import { createDiscordPluginBase, discordConfigAdapter } from "./shared.js";
|
||||
|
|
@ -78,7 +76,7 @@ import { collectDiscordStatusIssues } from "./status-issues.js";
|
|||
import { parseDiscordTarget } from "./targets.js";
|
||||
import { DiscordUiContainer } from "./ui.js";
|
||||
|
||||
type DiscordSendFn = typeof sendMessageDiscord;
|
||||
type DiscordSendFn = typeof import("./send.js").sendMessageDiscord;
|
||||
type DiscordCarbonModule = typeof import("@buape/carbon");
|
||||
type DiscordTextDisplay = InstanceType<DiscordCarbonModule["TextDisplay"]>;
|
||||
type DiscordSeparator = InstanceType<DiscordCarbonModule["Separator"]>;
|
||||
|
|
@ -88,6 +86,8 @@ let discordProviderRuntimePromise:
|
|||
| undefined;
|
||||
let discordProbeRuntimePromise: Promise<typeof import("./probe.runtime.js")> | undefined;
|
||||
let discordAuditModulePromise: Promise<typeof import("./audit.js")> | undefined;
|
||||
let discordSendModulePromise: Promise<typeof import("./send.js")> | undefined;
|
||||
let discordDirectoryLiveModulePromise: Promise<typeof import("./directory-live.js")> | undefined;
|
||||
let discordCarbonModuleCache: DiscordCarbonModule | null = null;
|
||||
|
||||
const require = createRequire(import.meta.url);
|
||||
|
|
@ -107,6 +107,16 @@ async function loadDiscordAuditModule() {
|
|||
return await discordAuditModulePromise;
|
||||
}
|
||||
|
||||
async function loadDiscordSendModule() {
|
||||
discordSendModulePromise ??= import("./send.js");
|
||||
return await discordSendModulePromise;
|
||||
}
|
||||
|
||||
async function loadDiscordDirectoryLiveModule() {
|
||||
discordDirectoryLiveModulePromise ??= import("./directory-live.js");
|
||||
return await discordDirectoryLiveModulePromise;
|
||||
}
|
||||
|
||||
function loadDiscordCarbonModule() {
|
||||
discordCarbonModuleCache ??= require("@buape/carbon") as DiscordCarbonModule;
|
||||
return discordCarbonModuleCache;
|
||||
|
|
@ -132,11 +142,11 @@ function resolveOptionalDiscordRuntime() {
|
|||
}
|
||||
}
|
||||
|
||||
function resolveDiscordSend(deps?: { [channelId: string]: unknown }): DiscordSendFn {
|
||||
async function resolveDiscordSend(deps?: { [channelId: string]: unknown }): Promise<DiscordSendFn> {
|
||||
return (
|
||||
resolveOutboundSendDep<DiscordSendFn>(deps, "discord") ??
|
||||
resolveOptionalDiscordRuntime()?.channel?.discord?.sendMessageDiscord ??
|
||||
sendMessageDiscord
|
||||
(await loadDiscordSendModule()).sendMessageDiscord
|
||||
);
|
||||
}
|
||||
|
||||
|
|
@ -447,10 +457,7 @@ export const discordPlugin: ChannelPlugin<ResolvedDiscordAccount, DiscordProbe>
|
|||
listPeers: async (params) => listDiscordDirectoryPeersFromConfig(params),
|
||||
listGroups: async (params) => listDiscordDirectoryGroupsFromConfig(params),
|
||||
...createRuntimeDirectoryLiveAdapter({
|
||||
getRuntime: () => ({
|
||||
listDirectoryGroupsLive: listDiscordDirectoryGroupsLive,
|
||||
listDirectoryPeersLive: listDiscordDirectoryPeersLive,
|
||||
}),
|
||||
getRuntime: loadDiscordDirectoryLiveModule,
|
||||
listPeersLive: (runtime) => runtime.listDirectoryPeersLive,
|
||||
listGroupsLive: (runtime) => runtime.listDirectoryGroupsLive,
|
||||
}),
|
||||
|
|
@ -609,7 +616,9 @@ export const discordPlugin: ChannelPlugin<ResolvedDiscordAccount, DiscordProbe>
|
|||
};
|
||||
}
|
||||
try {
|
||||
const perms = await fetchChannelPermissionsDiscord(parsedTarget.id, {
|
||||
const perms = await (
|
||||
await loadDiscordSendModule()
|
||||
).fetchChannelPermissionsDiscord(parsedTarget.id, {
|
||||
token,
|
||||
accountId: account.accountId ?? undefined,
|
||||
});
|
||||
|
|
@ -763,7 +772,7 @@ export const discordPlugin: ChannelPlugin<ResolvedDiscordAccount, DiscordProbe>
|
|||
message: PAIRING_APPROVED_MESSAGE,
|
||||
normalizeAllowEntry: createPairingPrefixStripper(/^(discord|user):/i),
|
||||
notify: async ({ id, message }) => {
|
||||
await sendMessageDiscord(`user:${id}`, message);
|
||||
await (await loadDiscordSendModule()).sendMessageDiscord(`user:${id}`, message);
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
@ -796,7 +805,7 @@ export const discordPlugin: ChannelPlugin<ResolvedDiscordAccount, DiscordProbe>
|
|||
attachedResults: {
|
||||
channel: "discord",
|
||||
sendText: async ({ cfg, to, text, accountId, deps, replyToId, silent }) => {
|
||||
const send = resolveDiscordSend(deps);
|
||||
const send = await resolveDiscordSend(deps);
|
||||
return await send(to, text, {
|
||||
verbose: false,
|
||||
cfg,
|
||||
|
|
@ -816,7 +825,7 @@ export const discordPlugin: ChannelPlugin<ResolvedDiscordAccount, DiscordProbe>
|
|||
replyToId,
|
||||
silent,
|
||||
}) => {
|
||||
const send = resolveDiscordSend(deps);
|
||||
const send = await resolveDiscordSend(deps);
|
||||
return await send(to, text, {
|
||||
verbose: false,
|
||||
cfg,
|
||||
|
|
@ -828,7 +837,9 @@ export const discordPlugin: ChannelPlugin<ResolvedDiscordAccount, DiscordProbe>
|
|||
});
|
||||
},
|
||||
sendPoll: async ({ cfg, to, poll, accountId, silent }) =>
|
||||
await sendPollDiscord(to, poll, {
|
||||
await (
|
||||
await loadDiscordSendModule()
|
||||
).sendPollDiscord(to, poll, {
|
||||
cfg,
|
||||
accountId: accountId ?? undefined,
|
||||
silent: silent ?? undefined,
|
||||
|
|
|
|||
Loading…
Reference in New Issue