diff --git a/src/utils/appeal-events.ts b/src/utils/appeal-events.ts index 04f9252..eab23a8 100644 --- a/src/utils/appeal-events.ts +++ b/src/utils/appeal-events.ts @@ -2,10 +2,9 @@ import { ActionRowBuilder, APIEmbedField, ButtonBuilder, ButtonStyle, Client, Di import { config } from '../config'; import { Database } from '../shared/Database'; import { Appeal, AppealUpdate, E621Post, PostFlag } from '../types'; -import { getAuthor, getColor, parseMarkdownToField, getFields } from './event-utils'; -import { humanizeCapitalization } from './string-utils'; import { getE621Post, getE621PostFlag, PostAction, spoilerOrBlacklist } from './e621-utils'; -import { parseDTextToMarkdown } from './dtext-utils'; +import { getAuthor, getColor, getFields, parseMarkdownToField } from './event-utils'; +import { humanizeCapitalization } from './string-utils'; export async function appealUpdateHandler(client: Client, update: string) { const data: AppealUpdate = JSON.parse(update); @@ -92,7 +91,7 @@ async function getCustomFields(appeal: Appeal, flag: PostFlag, post: E621Post): return [ { name: 'Deletion Reason', - value: await parseDTextToMarkdown(flag.reason), + value: await parseMarkdownToField(flag.reason), inline: true } ]; diff --git a/src/utils/dtext-utils.ts b/src/utils/dtext-utils.ts index 036dea6..de03193 100644 --- a/src/utils/dtext-utils.ts +++ b/src/utils/dtext-utils.ts @@ -1,4 +1,4 @@ -import { BlockNode, DocumentNode, formatMarkdown, InlineNode, LinkNode, MarkdownFormatContext, MarkdownHandlers, markdownHandlers, parseDTextToAST, TableBodyNode, TableHeadNode, TableLiteralNode, TableRowNode, TextNode } from '@clynamic/dmark'; +import { BlockNode, DocumentNode, formatMarkdown, InlineNode, LinkNode, MarkdownFormatContext, MarkdownHandlers, markdownHandlers, parseDTextToAST, SpoilerBlockNode, TableBodyNode, TableHeadNode, TableLiteralNode, TableRowNode, TextNode } from '@clynamic/dmark'; import { config } from '../config'; import { E621Post } from '../types'; import { getManyE621Posts, PostAction, SEARCH_LIMIT, spoilerOrBlacklist } from './e621-utils'; @@ -34,6 +34,20 @@ export async function parseDTextToMarkdown(text: string): Promise { const handlers: MarkdownHandlers = { ...markdownHandlers, + spoiler_block: (node: SpoilerBlockNode, out: string[], ctx: MarkdownFormatContext) => { + for (let i = 0; i < node.children.length; i++) { + ctx.atLineStart = true; + + if (i > 0) out.push('\n\n'); + + out.push('||'); + ctx.render(node.children[i], out); + out.push('||'); + } + + ctx.atLineStart = false; + }, + link: (node: LinkNode, out: string[], ctx: MarkdownFormatContext) => { ctx.atLineStart = false; if (node.linkType == 'wiki') { diff --git a/src/utils/event-utils.ts b/src/utils/event-utils.ts index 4a20bc4..0a2418d 100644 --- a/src/utils/event-utils.ts +++ b/src/utils/event-utils.ts @@ -2,11 +2,11 @@ import { APIEmbedField, EmbedAuthorOptions } from 'discord.js'; import { config } from '../config'; import { parseDTextToMarkdown } from './dtext-utils'; -const MAX_DESCRIPTION_LENGTH = 1024; +const MAX_FIELD_LENGTH = 1024; export async function parseMarkdownToField(input: string): Promise { const text = await parseDTextToMarkdown(input); - return text.length >= MAX_DESCRIPTION_LENGTH ? text.slice(0, MAX_DESCRIPTION_LENGTH - 3) + '...' : text; + return text.length >= MAX_FIELD_LENGTH ? text.slice(0, MAX_FIELD_LENGTH - 3) + '...' : text; } export function getAuthor(data: { user_id: number, user: string }): EmbedAuthorOptions {