mirror of
https://github.com/codeninjasllc/codecombat.git
synced 2025-03-24 11:50:58 -04:00
Added script to send out initial recruitment intro email.
This commit is contained in:
parent
fced3e821a
commit
bff71800b7
2 changed files with 104 additions and 2 deletions
103
scripts/mail.coffee
Normal file
103
scripts/mail.coffee
Normal file
|
@ -0,0 +1,103 @@
|
|||
do (setupLodash = this) ->
|
||||
GLOBAL._ = require 'lodash'
|
||||
_.str = require 'underscore.string'
|
||||
_.mixin _.str.exports()
|
||||
|
||||
async = require 'async'
|
||||
|
||||
serverSetup = require '../server_setup'
|
||||
sendwithus = require '../server/sendwithus'
|
||||
User = require '../server/users/User.coffee'
|
||||
Level = require '../server/levels/Level.coffee'
|
||||
LevelSession = require '../server/levels/sessions/LevelSession.coffee'
|
||||
|
||||
alreadyEmailed = []
|
||||
|
||||
DEBUGGING = true
|
||||
|
||||
sendInitialRecruitingEmail = ->
|
||||
leaderboards = [
|
||||
{slug: 'brawlwood', team: 'humans', limit: 55, name: "Brawlwood", original: "52d97ecd32362bc86e004e87", majorVersion: 0}
|
||||
{slug: 'brawlwood', team: 'ogres', limit: 40, name: "Brawlwood", original: "52d97ecd32362bc86e004e87", majorVersion: 0}
|
||||
{slug: 'dungeon-arena', team: 'humans', limit: 200, name: "Dungeon Arena", original: "53173f76c269d400000543c2", majorVersion: 0}
|
||||
{slug: 'dungeon-arena', team: 'ogres', limit: 150, name: "Dungeon Arena", original: "53173f76c269d400000543c2", majorVersion: 0}
|
||||
]
|
||||
async.waterfall [
|
||||
(callback) -> async.map leaderboards, grabSessions, callback
|
||||
(sessionLists, callback) -> async.map collapseSessions(sessionLists), grabUser, callback
|
||||
(users, callback) -> async.map users, emailUser, callback
|
||||
], (err, results) ->
|
||||
return console.log "Error:", err if err
|
||||
console.log "Looked at sending to #{results.length} users; sent to #{_.filter(results).length}."
|
||||
console.log "Sent to: ['#{(user.email for user in results when user).join('\', \'')}']"
|
||||
|
||||
grabSessions = (levelInfo, callback) ->
|
||||
queryParameters =
|
||||
level: {original: levelInfo.original, majorVersion: levelInfo.majorVersion}
|
||||
team: levelInfo.team
|
||||
submitted: true
|
||||
sortParameters = totalScore: -1
|
||||
selectString = 'totalScore creator'
|
||||
query = LevelSession
|
||||
.find(queryParameters)
|
||||
.limit(levelInfo.limit)
|
||||
.sort(sortParameters)
|
||||
.select(selectString)
|
||||
.lean()
|
||||
query.exec (err, sessions) ->
|
||||
return callback err if err
|
||||
for session, rank in sessions
|
||||
session.levelInfo = levelInfo
|
||||
session.rank = rank + 1
|
||||
callback null, sessions
|
||||
|
||||
collapseSessions = (sessionLists) ->
|
||||
userRanks = {}
|
||||
for sessionList in sessionLists
|
||||
for session in sessionList
|
||||
ranks = userRanks[session.creator] ? []
|
||||
ranks.push session
|
||||
userRanks[session.creator] = _.sortBy ranks, 'rank'
|
||||
topSessions = []
|
||||
for userID, ranks of userRanks
|
||||
topSessions.push ranks[0]
|
||||
topSessions
|
||||
|
||||
grabUser = (session, callback) ->
|
||||
findParameters = _id: session.creator
|
||||
selectString = 'email emailSubscriptions name jobProfile'
|
||||
query = User
|
||||
.findOne(findParameters)
|
||||
.select(selectString)
|
||||
.lean()
|
||||
query.exec (err, user) ->
|
||||
return callback err if err
|
||||
user.session = session
|
||||
callback null, user
|
||||
|
||||
totalEmailsSent = 0
|
||||
emailUser = (user, callback) ->
|
||||
return callback null, false if user.emails?.recruiting?.enabled is false # TODO: later, obey also "announcements" when that's untangled
|
||||
return callback null, false if user.email in alreadyEmailed
|
||||
return callback null, false if DEBUGGING and (totalEmailsSent > 1 or Math.random() > 0.1)
|
||||
++totalEmailsSent
|
||||
name = if user.firstName and user.lastName then "#{user.firstName}" else user.name
|
||||
name = "Wizard" if not name or name is "Anoner"
|
||||
team = user.session.levelInfo.team
|
||||
team = team.substr(0, team.length - 1)
|
||||
context =
|
||||
email_id: sendwithus.templates.one_time_recruiting_email
|
||||
recipient:
|
||||
address: if DEBUGGING then 'nick@codecombat.com' else user.email
|
||||
name: name
|
||||
email_data:
|
||||
name: name
|
||||
level_name: user.session.levelInfo.name
|
||||
place: "##{user.session.rank}" # like "#31"
|
||||
level_race: team
|
||||
sendwithus.api.send context, (err, result) ->
|
||||
return callback err if err
|
||||
callback null, user
|
||||
|
||||
serverSetup.connectToDatabase()
|
||||
sendInitialRecruitingEmail()
|
|
@ -1,12 +1,10 @@
|
|||
config = require '../server_config'
|
||||
sendwithusAPI = require 'sendwithus'
|
||||
swuAPIKey = config.mail.sendwithusAPIKey
|
||||
queues = require './commons/queue'
|
||||
|
||||
module.exports.setupRoutes = (app) ->
|
||||
return
|
||||
|
||||
|
||||
debug = not config.isProduction
|
||||
module.exports.api = new sendwithusAPI swuAPIKey, debug
|
||||
if config.unittest
|
||||
|
@ -16,3 +14,4 @@ module.exports.templates =
|
|||
ladder_update_email: 'JzaZxf39A4cKMxpPZUfWy4'
|
||||
patch_created: 'tem_xhxuNosLALsizTNojBjNcL'
|
||||
change_made_notify_watcher: 'tem_7KVkfmv9SZETb25dtHbUtG'
|
||||
one_time_recruiting_email: 'tem_mdFMgtcczHKYu94Jmq68j8'
|
||||
|
|
Loading…
Add table
Reference in a new issue