mirror of
https://github.com/ReCloudStudio/WebHooker.git
synced 2026-09-22 16:11:29 +00:00
fix(telegram): render HTML with markdown-it and strip HTML from Discord bodies
This commit is contained in:
parent
ea049e28c9
commit
9899cd01bf
7 changed files with 90 additions and 18 deletions
|
|
@ -1,3 +1,4 @@
|
|||
import MarkdownIt from "markdown-it";
|
||||
import type { NeutralMessage } from "../../types";
|
||||
import { splitMessageTitle } from "../../formatters/helpers";
|
||||
|
||||
|
|
@ -12,17 +13,15 @@ function esc(s: string): string {
|
|||
.replace(/"/g, """);
|
||||
}
|
||||
|
||||
const md = new MarkdownIt({ html: false, linkify: false, breaks: false, typographer: false });
|
||||
md.disable(["image", "autolink"]);
|
||||
md.renderer.rules.strong_open = (): string => "<b>";
|
||||
md.renderer.rules.strong_close = (): string => "</b>";
|
||||
md.renderer.rules.em_open = (): string => "<i>";
|
||||
md.renderer.rules.em_close = (): string => "</i>";
|
||||
|
||||
function mdToHtml(s: string): string {
|
||||
let out = esc(s);
|
||||
out = out.replace(
|
||||
/\[([^\]]+)\]\(([^)]+)\)/g,
|
||||
(_m, label, url) => `<a href="${esc(url)}">${label}</a>`,
|
||||
);
|
||||
out = out.replace(/\*\*([^*]+)\*\*/g, "<b>$1</b>");
|
||||
out = out.replace(/`([^`]+)`/g, "<code>$1</code>");
|
||||
out = out.replace(/(^|[^*])\*([^*]+)\*/g, "$1<i>$2</i>");
|
||||
out = out.replace(/~~([^~]+)~~/g, "<s>$1</s>");
|
||||
return out;
|
||||
return md.renderInline(s);
|
||||
}
|
||||
|
||||
function formatTimestamp(ts?: string): string {
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
import type { NeutralMessage, NeutralAuthor } from "../types";
|
||||
import { GITHUB_COLORS } from "./colors";
|
||||
import { cap, emojiPrefix, MAX_FIELD_VALUE, type T, buildMessage } from "./helpers";
|
||||
import { cap, emojiPrefix, htmlToText, MAX_FIELD_VALUE, type T, buildMessage } from "./helpers";
|
||||
|
||||
export function formatIssues(
|
||||
payload: Record<string, unknown>,
|
||||
|
|
@ -38,7 +38,7 @@ export function formatIssues(
|
|||
descriptionParts.push(t("events.issues.action_issue", { emoji: em(stateEmoji), action: al }));
|
||||
|
||||
if (issue.body) {
|
||||
const truncated = issue.body.slice(0, 300);
|
||||
const truncated = htmlToText(issue.body).slice(0, 300);
|
||||
descriptionParts.push(`\n${truncated}${issue.body.length > 300 ? "..." : ""}`);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ import {
|
|||
branchLink,
|
||||
cap,
|
||||
emojiPrefix,
|
||||
htmlToText,
|
||||
MAX_FIELD_VALUE,
|
||||
type T,
|
||||
buildMessage,
|
||||
|
|
@ -58,7 +59,7 @@ export function formatPullRequest(
|
|||
descriptionParts.push(t("events.pr.action_pr", { emoji: em(stateEmoji), action: al }));
|
||||
|
||||
if (pr.body) {
|
||||
const truncated = pr.body.slice(0, 300);
|
||||
const truncated = htmlToText(pr.body).slice(0, 300);
|
||||
descriptionParts.push(`\n${truncated}${pr.body.length > 300 ? "..." : ""}`);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue