From e3b81b7746b4515a80cb9ade01c5e9ddf1b6fe5f Mon Sep 17 00:00:00 2001 From: keyan Date: Sat, 28 Oct 2023 18:28:13 -0500 Subject: [PATCH] add top meme and fact to newsletter script --- scripts/newsletter.js | 57 ++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 54 insertions(+), 3 deletions(-) diff --git a/scripts/newsletter.js b/scripts/newsletter.js index ad2c37a5..32a2d722 100644 --- a/scripts/newsletter.js +++ b/scripts/newsletter.js @@ -31,13 +31,51 @@ const client = new ApolloClient({ }) const abbrNum = n => { - if (n < 1e4) return n - if (n >= 1e4 && n < 1e6) return +(n / 1e3).toFixed(1) + 'k' + if (n < 1e3) return n + if (n >= 1e3 && n < 1e6) return +(n / 1e3).toFixed(1) + 'k' if (n >= 1e6 && n < 1e9) return +(n / 1e6).toFixed(1) + 'm' if (n >= 1e9 && n < 1e12) return +(n / 1e9).toFixed(1) + 'b' if (n >= 1e12) return +(n / 1e12).toFixed(1) + 't' } +async function bountyWinner (q) { + const BOUNTY = gql` + query Search($q: String, $sort: String, $what: String, $when: String) { + search(q: $q, sort: $sort, what: $what, when: $when) { + items { + id + bountyPaidTo + } + } + }` + + const WINNER = gql` + query Item($id: ID!) { + item(id: $id) { + text + sats + imgproxyUrls + user { + name + } + } + }` + + const bounty = await client.query({ + query: BOUNTY, + variables: { q: `${q} nym:sn`, sort: 'recent', what: 'posts', when: 'week' } + }) + + const item = await client.query({ + query: WINNER, + variables: { id: bounty.data.search.items[0].bountyPaidTo[0] } + }) + + const winner = { ...item.data.item, image: Object.values(item.data.item.imgproxyUrls)[0]?.['640w'] } + + return { bounty: bounty.data.search.items[0].id, winner } +} + async function main () { const top = await client.query({ query: ITEMS, @@ -54,6 +92,9 @@ async function main () { variables: { sub: 'jobs' } }) + const topMeme = await bountyWinner('monday meme') + const topFact = await bountyWinner('fun fact') + process.stdout.write( `Happy Sat-urday Stackers, @@ -63,7 +104,7 @@ Have a great weekend! ${top.data.items.items.slice(0, 10).map((item, i) => `${i + 1}. [@${item.user.name}](https://stacker.news/${item.user.name}) [${item.title}](https://stacker.news/items/${item.id}) - [${item.title}](https://stacker.news/items/${item.id}) - - ${abbrNum(item.sats)} sats${item.boost ? ` \\ ${abbrNum(item.boost)} boost` : ''} \\ ${item.ncomments} comments\n`).join('')} + - ${abbrNum(item.sats)} sats${item.boost ? ` \\ ${abbrNum(item.boost)} boost` : ''} \\ ${item.ncomments} comments \\ [@${item.user.name}](https://stacker.news/${item.user.name})\n`).join('')} ##### Don't miss ${top.data.items.items.map((item, i) => @@ -75,6 +116,16 @@ ${meta.data.items.items.slice(0, 10).map((item, i) => [**all of this week's top posts**](https://stacker.news/top/posts/week) +##### Top Monday meme \\ ${abbrNum(topMeme.winner.sats)} sats \\ [@${topMeme.winner.user.name}](https://stacker.news/${topMeme.winner.user.name}) +![](${topMeme.winner.image}) + +[**all monday memes**](https://stacker.news/items/${topMeme.bounty}) + +##### Top Friday fun fact \\ ${abbrNum(topFact.winner.sats)} sats \\ [@${topFact.winner.user.name}](https://stacker.news/${topFact.winner.user.name}) +${topFact.winner.text} + +[**all friday fun facts**](https://stacker.news/items/${topFact.bounty}) + ##### Promoted jobs ${jobs.data.items.items.filter(i => i.maxBid > 0 && i.status === 'ACTIVE').slice(0, 5).map((item, i) => `${i + 1}. [${item.title.trim()} \\ ${item.company} \\ ${item.location}${item.remote ? ' or Remote' : ''}](https://stacker.news/items/${item.id})\n`).join('')}