diff --git a/server/src/index.ts b/server/src/index.ts index e5edd7c..07a9a48 100644 --- a/server/src/index.ts +++ b/server/src/index.ts @@ -117,7 +117,7 @@ export async function handleWebhook( (result.data && result.data["review"] && (result.data["review"] as Record)["score"] ? ` — score ${(result.data["review"] as Record)["score"]}/100` : "") + - `\n${result.markdown.slice(0, 4000)}`, + `\n${htmlToDiscordPlain(result.markdown).slice(0, 4000)}`, "✅ PR-Agent Review Complete", ); } @@ -147,6 +147,37 @@ async function getHttpx() { return fetch; } +/** Strip HTML table markup down to Discord-friendly plain text. + * Discord embeds render limited markdown — raw / tags + * would show as literal HTML. Convert the reviewer table into lines. */ +function htmlToDiscordPlain(html: string): string { + let s = html + .replace(/
/g, "") + .replace(/<\/details>/g, "") + .replace(//g, "▶ ") + .replace(/<\/summary>/g, "\n") + .replace(//gi, "\n") + .replace(/<\/tr>/gi, "\n") + .replace(/<\/td>/gi, "") + .replace(/<\/th>/gi, "") + .replace(/]*>/gi, "") + .replace(/]*>/gi, "") + .replace(/]*>/gi, "") + .replace(/]*>/gi, "") + .replace(/<\/table>/gi, "") + .replace(/]*>/gi, "• ") + .replace(/<[^>]+>/g, "") + .replace(/ /g, " ") + .replace(/&/g, "&") + .replace(/</g, "<") + .replace(/>/g, ">") + .replace(/"/g, '"') + .replace(/'/g, "'") + .replace(/\n{3,}/g, "\n\n") + .trim(); + return s; +} + async function sendDiscord(webhook: string, content: string, title?: string): Promise { try { await fetch(webhook, {
/