-
Notifications
You must be signed in to change notification settings - Fork 23
/
Copy pathseed.js
65 lines (56 loc) · 1.42 KB
/
seed.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
'use strict'
/**
* Require Modules
*/
const Promise = require('bluebird')
const Botkit = require('botkit')
const monk = require('monk')
const debug = require('debug')('bot:db:seed')
/**
* Local Variables
*/
const {MONGO_URI, SLACK_TOKEN: token} = require('process').env
if (!MONGO_URI) throw new Error('MONGO_URI is not set')
if (!token) throw new Error('SLACK_TOKEN is required!')
const db = monk(MONGO_URI)
const users = db.get('users')
const updates = []
const controller = Botkit.slackbot()
const bot = controller.spawn({ token })
/**
* Updates
* @param {[type]} member [description]
* @return {[type]} [description]
*/
function updateMember (member) {
const invites = 1
const {id, name, is_owner, is_admin, is_bot} = member
const {real_name_normalized: real_name, email} = member.profile
const $set = {
id,
name,
real_name,
email,
invites,
is_owner,
is_admin,
is_bot
}
const $setOnInsert = {guests: [], createdAt: new Date()}
updates.push(
users.update({id}, {$set, $setOnInsert}, {upsert: true})
.then(() => debug(`updated ${member.name}`))
)
}
/**
* Make request to Slack API so we can get all users and then update them
*/
bot.api.users.list({}, (err, res) => {
if (err) { throw err }
debug(`found ${res.members.length} members`)
res.members.forEach(updateMember)
Promise.all(updates).then(() => {
debug('seed complete')
process.exit()
})
})