mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-09 19:44:30 +00:00
Discord: CV2! (#16364)
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
import type { RequestClient } from "@buape/carbon";
|
||||
import type { APIChannel } from "discord-api-types/v10";
|
||||
import { serializePayload, type MessagePayloadObject, type RequestClient } from "@buape/carbon";
|
||||
import { ChannelType, Routes } from "discord-api-types/v10";
|
||||
import crypto from "node:crypto";
|
||||
import fs from "node:fs/promises";
|
||||
@@ -18,6 +18,7 @@ import { extensionForMime } from "../media/mime.js";
|
||||
import { loadWebMediaRaw } from "../web/media.js";
|
||||
import { resolveDiscordAccount } from "./accounts.js";
|
||||
import {
|
||||
buildDiscordMessagePayload,
|
||||
buildDiscordSendError,
|
||||
buildDiscordTextChunks,
|
||||
createDiscordClient,
|
||||
@@ -25,9 +26,14 @@ import {
|
||||
normalizeStickerIds,
|
||||
parseAndResolveRecipient,
|
||||
resolveChannelId,
|
||||
resolveDiscordSendComponents,
|
||||
resolveDiscordSendEmbeds,
|
||||
sendDiscordMedia,
|
||||
sendDiscordText,
|
||||
stripUndefinedFields,
|
||||
SUPPRESS_NOTIFICATIONS_FLAG,
|
||||
type DiscordSendComponents,
|
||||
type DiscordSendEmbeds,
|
||||
} from "./send.shared.js";
|
||||
import {
|
||||
ensureOggOpus,
|
||||
@@ -44,7 +50,8 @@ type DiscordSendOpts = {
|
||||
rest?: RequestClient;
|
||||
replyTo?: string;
|
||||
retry?: RetryConfig;
|
||||
embeds?: unknown[];
|
||||
components?: DiscordSendComponents;
|
||||
embeds?: DiscordSendEmbeds;
|
||||
silent?: boolean;
|
||||
};
|
||||
|
||||
@@ -103,7 +110,19 @@ export async function sendMessageDiscord(
|
||||
chunkMode,
|
||||
});
|
||||
const starterContent = chunks[0]?.trim() ? chunks[0] : threadName;
|
||||
const starterEmbeds = opts.embeds?.length ? opts.embeds : undefined;
|
||||
const starterComponents = resolveDiscordSendComponents({
|
||||
components: opts.components,
|
||||
text: starterContent,
|
||||
isFirst: true,
|
||||
});
|
||||
const starterEmbeds = resolveDiscordSendEmbeds({ embeds: opts.embeds, isFirst: true });
|
||||
const silentFlags = opts.silent ? 1 << 12 : undefined;
|
||||
const starterPayload: MessagePayloadObject = buildDiscordMessagePayload({
|
||||
text: starterContent,
|
||||
components: starterComponents,
|
||||
embeds: starterEmbeds,
|
||||
flags: silentFlags,
|
||||
});
|
||||
let threadRes: { id: string; message?: { id: string; channel_id: string } };
|
||||
try {
|
||||
threadRes = (await request(
|
||||
@@ -111,10 +130,7 @@ export async function sendMessageDiscord(
|
||||
rest.post(Routes.threads(channelId), {
|
||||
body: {
|
||||
name: threadName,
|
||||
message: {
|
||||
content: starterContent,
|
||||
...(starterEmbeds ? { embeds: starterEmbeds } : {}),
|
||||
},
|
||||
message: stripUndefinedFields(serializePayload(starterPayload)),
|
||||
},
|
||||
}) as Promise<{ id: string; message?: { id: string; channel_id: string } }>,
|
||||
"forum-thread",
|
||||
@@ -146,6 +162,7 @@ export async function sendMessageDiscord(
|
||||
request,
|
||||
accountInfo.config.maxLinesPerMessage,
|
||||
undefined,
|
||||
undefined,
|
||||
chunkMode,
|
||||
opts.silent,
|
||||
);
|
||||
@@ -158,6 +175,7 @@ export async function sendMessageDiscord(
|
||||
request,
|
||||
accountInfo.config.maxLinesPerMessage,
|
||||
undefined,
|
||||
undefined,
|
||||
chunkMode,
|
||||
opts.silent,
|
||||
);
|
||||
@@ -172,6 +190,7 @@ export async function sendMessageDiscord(
|
||||
request,
|
||||
accountInfo.config.maxLinesPerMessage,
|
||||
undefined,
|
||||
undefined,
|
||||
chunkMode,
|
||||
opts.silent,
|
||||
);
|
||||
@@ -209,6 +228,7 @@ export async function sendMessageDiscord(
|
||||
opts.replyTo,
|
||||
request,
|
||||
accountInfo.config.maxLinesPerMessage,
|
||||
opts.components,
|
||||
opts.embeds,
|
||||
chunkMode,
|
||||
opts.silent,
|
||||
@@ -221,6 +241,7 @@ export async function sendMessageDiscord(
|
||||
opts.replyTo,
|
||||
request,
|
||||
accountInfo.config.maxLinesPerMessage,
|
||||
opts.components,
|
||||
opts.embeds,
|
||||
chunkMode,
|
||||
opts.silent,
|
||||
|
||||
Reference in New Issue
Block a user