






















@@ -1,13 +1,4 @@
1-import {
2-Button,
3-Row,
4-Separator,
5-TextDisplay,
6-serializePayload,
7-type MessagePayloadObject,
8-type TopLevelComponents,
9-} from "@buape/carbon";
10-import { ButtonStyle, Routes } from "discord-api-types/v10";
1+import { ButtonStyle } from "discord-api-types/v10";
112import type {
123ChannelApprovalCapabilityHandlerContext,
134ExecApprovalExpiredView,
@@ -25,6 +16,19 @@ import type { DiscordExecApprovalConfig, OpenClawConfig } from "openclaw/plugin-
2516import { logDebug, logError, normalizeOptionalString } from "openclaw/plugin-sdk/text-runtime";
2617import { shouldHandleDiscordApprovalRequest } from "./approval-shared.js";
2718import { isDiscordExecApprovalClientEnabled } from "./exec-approvals.js";
19+import {
20+Button,
21+createChannelMessage,
22+createUserDmChannel,
23+deleteChannelMessage,
24+editChannelMessage,
25+Row,
26+Separator,
27+TextDisplay,
28+serializePayload,
29+type MessagePayloadObject,
30+type TopLevelComponents,
31+} from "./internal/discord.js";
2832import { createDiscordClient, stripUndefinedFields } from "./send.shared.js";
2933import { DiscordUiContainer } from "./ui.js";
3034@@ -364,7 +368,7 @@ async function updateMessage(params: {
364368const payload = buildExecApprovalPayload(params.container);
365369await discordRequest(
366370() =>
367-rest.patch(Routes.channelMessage(params.channelId, params.messageId), {
371+editChannelMessage(rest, params.channelId, params.messageId, {
368372body: stripUndefinedFields(serializePayload(payload)),
369373}),
370374"update-approval",
@@ -394,7 +398,7 @@ async function finalizeMessage(params: {
394398accountId: params.accountId,
395399});
396400await discordRequest(
397-() => rest.delete(Routes.channelMessage(params.channelId, params.messageId)) as Promise<void>,
401+() => deleteChannelMessage(rest, params.channelId, params.messageId),
398402"delete-approval",
399403);
400404} catch (err) {
@@ -524,10 +528,7 @@ export const discordApprovalNativeRuntime = createChannelApprovalNativeRuntimeAd
524528});
525529const userId = plannedTarget.target.to;
526530const dmChannel = (await discordRequest(
527-() =>
528-rest.post(Routes.userChannels(), {
529-body: { recipient_id: userId },
530-}) as Promise<{ id: string }>,
531+() => createUserDmChannel(rest, userId),
531532"dm-channel",
532533)) as { id: string };
533534if (!dmChannel?.id) {
@@ -561,9 +562,13 @@ export const discordApprovalNativeRuntime = createChannelApprovalNativeRuntimeAd
561562});
562563const message = (await discordRequest(
563564() =>
564-rest.post(Routes.channelMessages(preparedTarget.discordChannelId), {
565-body: pendingPayload.body,
566-}) as Promise<{ id: string; channel_id: string }>,
565+createChannelMessage<{ id: string; channel_id: string }>(
566+rest,
567+preparedTarget.discordChannelId,
568+{
569+body: pendingPayload.body,
570+},
571+),
567572plannedTarget.surface === "origin" ? "send-approval-channel" : "send-approval",
568573)) as { id: string; channel_id: string };
569574if (!message?.id) {
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。