Discord: CV2! (#16364)

This commit is contained in:
Shadow
2026-02-15 10:24:53 -06:00
committed by GitHub
parent 95355ba25a
commit 9203a2fdb1
22 changed files with 753 additions and 225 deletions

View File

@@ -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,