sendInterestingMarketsEmail

This commit is contained in:
mantikoros 2022-08-19 12:17:03 -05:00
parent 3f2c9d4b68
commit 02d96399d8
2 changed files with 26 additions and 32 deletions

View File

@ -392,65 +392,56 @@ export const sendNewAnswerEmail = async (
) )
} }
export const sendSixContractsEmail = async ( export const sendInterestingMarketsEmail = async (
user: User,
privateUser: PrivateUser, privateUser: PrivateUser,
contractsToSend: Contract[] contractsToSend: Contract[],
deliveryTime?: string
) => { ) => {
const emailType = 'weekly-trending'
const unsubscribeUrl = `${UNSUBSCRIBE_ENDPOINT}?id=${privateUser.id}&type=${emailType}`
if ( if (
!privateUser || !privateUser ||
!privateUser.email || !privateUser.email ||
privateUser?.unsubscribedFromWeeklyTrendingEmails privateUser?.unsubscribedFromWeeklyTrendingEmails
) )
return return
const emailType = 'weekly-trending'
const unsubscribeUrl = `${UNSUBSCRIBE_ENDPOINT}?id=${privateUser.id}&type=${emailType}`
const { name } = user
const firstName = name.split(' ')[0]
await sendTemplateEmail( await sendTemplateEmail(
privateUser.email, privateUser.email,
contractsToSend[0].question + ' and 5 more questions for you.', 'Interesting markets on Manifold',
// used to be 3 and I can't change the template name! 'interesting-markets',
'3-trending-markets',
{ {
name: firstName,
unsubscribeLink: unsubscribeUrl,
question1Title: contractsToSend[0].question, question1Title: contractsToSend[0].question,
question1Description: getTextDescription(contractsToSend[0]),
question1Link: contractUrl(contractsToSend[0]), question1Link: contractUrl(contractsToSend[0]),
question1ImgSrc: imageSourceUrl(contractsToSend[0]), question1ImgSrc: imageSourceUrl(contractsToSend[0]),
question2Title: contractsToSend[1].question, question2Title: contractsToSend[1].question,
question2Description: getTextDescription(contractsToSend[1]),
question2Link: contractUrl(contractsToSend[1]), question2Link: contractUrl(contractsToSend[1]),
question2ImgSrc: imageSourceUrl(contractsToSend[1]), question2ImgSrc: imageSourceUrl(contractsToSend[1]),
question3Title: contractsToSend[2].question, question3Title: contractsToSend[2].question,
question3Description: getTextDescription(contractsToSend[2]),
question3Link: contractUrl(contractsToSend[2]), question3Link: contractUrl(contractsToSend[2]),
question3ImgSrc: imageSourceUrl(contractsToSend[2]), question3ImgSrc: imageSourceUrl(contractsToSend[2]),
question4Title: contractsToSend[3].question, question4Title: contractsToSend[3].question,
question4Description: getTextDescription(contractsToSend[3]),
question4Link: contractUrl(contractsToSend[3]), question4Link: contractUrl(contractsToSend[3]),
question4ImgSrc: imageSourceUrl(contractsToSend[3]), question4ImgSrc: imageSourceUrl(contractsToSend[3]),
question5Title: contractsToSend[4].question, question5Title: contractsToSend[4].question,
question5Description: getTextDescription(contractsToSend[4]),
question5Link: contractUrl(contractsToSend[4]), question5Link: contractUrl(contractsToSend[4]),
question5ImgSrc: imageSourceUrl(contractsToSend[4]), question5ImgSrc: imageSourceUrl(contractsToSend[4]),
question6Title: contractsToSend[5].question, question6Title: contractsToSend[5].question,
question6Description: getTextDescription(contractsToSend[5]),
question6Link: contractUrl(contractsToSend[5]), question6Link: contractUrl(contractsToSend[5]),
question6ImgSrc: imageSourceUrl(contractsToSend[5]), question6ImgSrc: imageSourceUrl(contractsToSend[5]),
unsubscribeLink: unsubscribeUrl, },
} deliveryTime ? { 'o:deliverytime': deliveryTime } : undefined
) )
} }
function getTextDescription(contract: Contract) {
const { description } = contract
let text = ''
if (typeof description === 'string') text = description
else text = richTextToString(description)
if (text.length > 300) {
return text.substring(0, 300) + '...'
}
return text
}
function contractUrl(contract: Contract) { function contractUrl(contract: Contract) {
return `https://manifold.markets/${contract.creatorUsername}/${contract.slug}` return `https://manifold.markets/${contract.creatorUsername}/${contract.slug}`
} }

View File

@ -2,9 +2,9 @@ import * as functions from 'firebase-functions'
import * as admin from 'firebase-admin' import * as admin from 'firebase-admin'
import { Contract } from '../../common/contract' import { Contract } from '../../common/contract'
import { getPrivateUser, getValues, isProd, log } from './utils' import { getPrivateUser, getUser, getValues, isProd, log } from './utils'
import { filterDefined } from '../../common/util/array' import { filterDefined } from '../../common/util/array'
import { sendSixContractsEmail } from './emails' import { sendInterestingMarketsEmail } from './emails'
import { createRNG, shuffle } from '../../common/util/random' import { createRNG, shuffle } from '../../common/util/random'
import { DAY_MS } from '../../common/util/time' import { DAY_MS } from '../../common/util/time'
@ -17,7 +17,7 @@ export const weeklyMarketsEmails = functions
const firestore = admin.firestore() const firestore = admin.firestore()
async function getTrendingContracts() { export async function getTrendingContracts() {
return await getValues<Contract>( return await getValues<Contract>(
firestore firestore
.collection('contracts') .collection('contracts')
@ -26,7 +26,7 @@ async function getTrendingContracts() {
.where('visibility', '==', 'public') .where('visibility', '==', 'public')
.orderBy('closeTime', 'asc') .orderBy('closeTime', 'asc')
.orderBy('popularityScore', 'desc') .orderBy('popularityScore', 'desc')
.limit(50) .limit(15)
) )
} }
@ -67,7 +67,10 @@ async function sendTrendingMarketsEmailsToAllUsers() {
numEmailsToSend numEmailsToSend
) )
await sendSixContractsEmail(privateUser, contractsToSend) const user = await getUser(privateUser.id)
if (!user) continue
await sendInterestingMarketsEmail(user, privateUser, contractsToSend)
} }
} }