fedimbed: spoiler support

This commit is contained in:
Cynthia Foxwell 2023-01-08 19:09:34 -07:00
parent 105b0ade06
commit d98dc9b925

View file

@ -8,7 +8,8 @@ const {parseHtmlEntities, getUploadLimit} = require("../lib/utils.js");
const FRIENDLY_USERAGENT = const FRIENDLY_USERAGENT =
"HiddenPhox/fedimbed (https://gitdab.com/Cynosphere/HiddenPhox)"; "HiddenPhox/fedimbed (https://gitdab.com/Cynosphere/HiddenPhox)";
const URLS_REGEX = /(?:\s|^)(https?:\/\/[^\s<]+[^<.,:;"'\]\s])/g; const URLS_REGEX = /(?:\s|^)(\|\|\s+)(https?:\/\/[^\s<]+[^<.,:;"'\]\s])(\s+\|\|)/g;
const SPOILER_REGEX = /^\|\|([\s\S]+?)\|\|/;
const PATH_REGEX = { const PATH_REGEX = {
mastodon: /^\/@(.+?)\/(\d+)\/?/, mastodon: /^\/@(.+?)\/(\d+)\/?/,
@ -61,7 +62,7 @@ async function resolvePlatform(url) {
return nodeinfo.software.name; return nodeinfo.software.name;
} }
async function processUrl(msg, url) { async function processUrl(msg, url, spoiler = false) {
let urlObj = new URL(url); let urlObj = new URL(url);
let platform = await resolvePlatform(url); let platform = await resolvePlatform(url);
let color = PLATFORM_COLORS[platform]; let color = PLATFORM_COLORS[platform];
@ -519,7 +520,7 @@ async function processUrl(msg, url) {
content: content:
cw && (images.length > 0 || videos.length > 0 || audios.length > 0) cw && (images.length > 0 || videos.length > 0 || audios.length > 0)
? `:warning: ${cw} || ${url} ||` ? `:warning: ${cw} || ${url} ||`
: "", : spoiler ? `|| ${url} ||` : "",
embeds, embeds,
files, files,
allowedMentions: { allowedMentions: {
@ -555,7 +556,8 @@ events.add("messageCreate", "fedimbed", async function (msg) {
if (URLS_REGEX.test(msg.content)) { if (URLS_REGEX.test(msg.content)) {
const urls = msg.content.match(URLS_REGEX); const urls = msg.content.match(URLS_REGEX);
for (let url of urls) { for (let url of urls) {
url = url.trim().replace("@\u200b", "@").replace("@%E2%80%8B", "@"); const hasSpoiler = url.test(SPOILER_REGEX);
url = url.replace(/\|/g,"").trim().replace("@\u200b", "@").replace("@%E2%80%8B", "@");
for (const service of Object.keys(PATH_REGEX)) { for (const service of Object.keys(PATH_REGEX)) {
const regex = PATH_REGEX[service]; const regex = PATH_REGEX[service];
const urlObj = new URL(url); const urlObj = new URL(url);
@ -564,7 +566,7 @@ events.add("messageCreate", "fedimbed", async function (msg) {
"fedimbed", "fedimbed",
`Hit "${service}" for "${url}", processing now.` `Hit "${service}" for "${url}", processing now.`
); );
await processUrl(msg, url).catch((err) => { await processUrl(msg, url, hasSpoiler).catch((err) => {
logger.error("fedimbed", `Error processing "${url}": ${err}`); logger.error("fedimbed", `Error processing "${url}": ${err}`);
}); });
break; break;