From bcf2b9a5f19cd8c3a707da2d5fc51534a268bf4b Mon Sep 17 00:00:00 2001 From: Gordon Pedersen Date: Thu, 23 May 2024 10:50:23 +1000 Subject: [PATCH] changes to mentions --- src/worker.js | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/src/worker.js b/src/worker.js index 4f1d953..1dc7d82 100644 --- a/src/worker.js +++ b/src/worker.js @@ -99,10 +99,10 @@ async function handleLol(body, env) { tags:[] } // this is the content - let content = status.content + let content = /**/status.content/*/body.status_text//*/// can switch for testing // let's get funky with the hashtags - content.match(/#\w+/g).filter((v,i,a) => a.indexOf(v) === i).forEach(hashtag => { + content.match(/#\w+/g)?.filter((v,i,a) => a.indexOf(v) === i)?.forEach(hashtag => { const tag = hashtag.substring(1) const nonPascal = tag.replace(/([a-z])([A-Z])/g, "$1 $2") const kebab = tag.replace(/([a-z])([A-Z])/g, "$1-$2").toLowerCase() @@ -110,6 +110,25 @@ async function handleLol(body, env) { content = content.replaceAll(hashtag, `[${hashtag}](/tag/${kebab}){.tag}`) }) + // and similarly with fediverse mentions + const mentions = content.match(/@[\w\-]+@[\w\-]+\.\S+/)?.filter((v,i,a) => a.indexOf(v) === i) + console.log(mentions) + for(let mention of mentions) { + try{ + const handle = mention.substring(1) + const domain = handle.substring(handle.indexOf('@') + 1) + const webfinger = await (await fetch(`https://${domain}/.well-known/webfinger?resource=acct:${handle}`)).json() + if(webfinger) { + const link = webfinger.links?.find(l => l.rel == "http://webfinger.net/rel/profile-page")?.href + || webfinger.links?.find(l => l.rel == "me" || l.rel == "self")?.href + || webfinger.aliases && webfinger.aliases.length > 0 ? webfinger.aliases[0] : undefined + + if(link) content = content.replaceAll(mention, `[${mention}](${link}){.mention}`) + } + } + catch(err) { console.error(err) } + } + const yamlOptions = { collectionStyle: 'flow', simpleKeys: true