Fix spoilers

This commit is contained in:
Tarrgon
2026-06-16 10:40:26 -04:00
parent e71caf1a07
commit 0aaa4483f3
3 changed files with 20 additions and 7 deletions
+3 -4
View File
@@ -2,10 +2,9 @@ import { ActionRowBuilder, APIEmbedField, ButtonBuilder, ButtonStyle, Client, Di
import { config } from '../config'; import { config } from '../config';
import { Database } from '../shared/Database'; import { Database } from '../shared/Database';
import { Appeal, AppealUpdate, E621Post, PostFlag } from '../types'; 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 { 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) { export async function appealUpdateHandler(client: Client, update: string) {
const data: AppealUpdate = JSON.parse(update); const data: AppealUpdate = JSON.parse(update);
@@ -92,7 +91,7 @@ async function getCustomFields(appeal: Appeal, flag: PostFlag, post: E621Post):
return [ return [
{ {
name: 'Deletion Reason', name: 'Deletion Reason',
value: await parseDTextToMarkdown(flag.reason), value: await parseMarkdownToField(flag.reason),
inline: true inline: true
} }
]; ];
+15 -1
View File
@@ -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 { config } from '../config';
import { E621Post } from '../types'; import { E621Post } from '../types';
import { getManyE621Posts, PostAction, SEARCH_LIMIT, spoilerOrBlacklist } from './e621-utils'; import { getManyE621Posts, PostAction, SEARCH_LIMIT, spoilerOrBlacklist } from './e621-utils';
@@ -34,6 +34,20 @@ export async function parseDTextToMarkdown(text: string): Promise<string> {
const handlers: MarkdownHandlers = { const handlers: MarkdownHandlers = {
...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) => { link: (node: LinkNode, out: string[], ctx: MarkdownFormatContext) => {
ctx.atLineStart = false; ctx.atLineStart = false;
if (node.linkType == 'wiki') { if (node.linkType == 'wiki') {
+2 -2
View File
@@ -2,11 +2,11 @@ import { APIEmbedField, EmbedAuthorOptions } from 'discord.js';
import { config } from '../config'; import { config } from '../config';
import { parseDTextToMarkdown } from './dtext-utils'; import { parseDTextToMarkdown } from './dtext-utils';
const MAX_DESCRIPTION_LENGTH = 1024; const MAX_FIELD_LENGTH = 1024;
export async function parseMarkdownToField(input: string): Promise<string> { export async function parseMarkdownToField(input: string): Promise<string> {
const text = await parseDTextToMarkdown(input); 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 { export function getAuthor(data: { user_id: number, user: string }): EmbedAuthorOptions {