diff --git a/backend/src/plugins/Logs/types.ts b/backend/src/plugins/Logs/types.ts index 67510e86..41af232d 100644 --- a/backend/src/plugins/Logs/types.ts +++ b/backend/src/plugins/Logs/types.ts @@ -6,7 +6,7 @@ import { GuildCases } from "../../data/GuildCases.js"; import { GuildLogs } from "../../data/GuildLogs.js"; import { GuildSavedMessages } from "../../data/GuildSavedMessages.js"; import { LogType } from "../../data/LogType.js"; -import { keys, zBoundedCharacters, zMessageContent, zRegex, zSnowflake } from "../../utils.js"; +import { keys, zBoundedCharacters, zEmbedInput, zMessageContent, zRegex, zSnowflake, zStrictMessageContent } from "../../utils.js"; import { MessageBuffer } from "../../utils/MessageBuffer.js"; import { TemplateSafeCase, @@ -27,11 +27,19 @@ const DEFAULT_BATCH_TIME = 1000; const MIN_BATCH_TIME = 250; const MAX_BATCH_TIME = 5000; +const zStrictLogMessageContent = zStrictMessageContent.extend({ + embed: zEmbedInput.optional(), +}); +const zLogMessageContent = z.union([ + zBoundedCharacters(0, 2000), + zStrictLogMessageContent, +]); + // A bit of a workaround so we can pass LogType keys to z.enum() -const zMessageContentWithDefault = zMessageContent.default(""); +const zMessageContentWithDefault = zLogMessageContent.default(""); const logTypes = keys(LogType); const logTypeProps = logTypes.reduce((map, type) => { - map[type] = zMessageContent.default(DefaultLogMessages[type] || ""); + map[type] = zLogMessageContent.default(DefaultLogMessages[type] || ""); return map; }, {} as Record); const zLogFormats = z.strictObject(logTypeProps); diff --git a/backend/src/plugins/Logs/util/getLogMessage.ts b/backend/src/plugins/Logs/util/getLogMessage.ts index 30c92087..7214a08f 100644 --- a/backend/src/plugins/Logs/util/getLogMessage.ts +++ b/backend/src/plugins/Logs/util/getLogMessage.ts @@ -37,6 +37,11 @@ export async function getLogMessage( const format = opts?.format?.[LogType[type]] || config.format[LogType[type]] || ""; if (format === "" || format == null) return null; + if (typeof format === "object" && format.embed) { + format.embeds = [format.embed]; + delete format.embed; + } + // See comment on FORMAT_NO_TIMESTAMP in types.ts const timestampFormat = opts?.timestamp_format ?? config.timestamp_format; diff --git a/backend/src/utils.ts b/backend/src/utils.ts index d69a0611..3bb3e0eb 100644 --- a/backend/src/utils.ts +++ b/backend/src/utils.ts @@ -266,7 +266,7 @@ export const zEmbedInput = z.object({ export type EmbedWith = APIEmbed & Pick, T>; -export const zStrictMessageContent = z.object({ +export const zStrictMessageContent = z.strictObject({ content: z.string().optional(), tts: z.boolean().optional(), embeds: z.array(zEmbedInput).optional(),