forked from howdyai/botkit
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbot.js
executable file
·109 lines (91 loc) · 2.48 KB
/
bot.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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
var process_token = process.env.token;
if (!process_token) {
console.log('Error: Specify token in environment');
process.exit(1);
}
var Botkit = require('./lib/Botkit.js');
var os = require('os');
var schedule = require('node-schedule');
var controller = Botkit.slackbot({
debug: false
});
var bot = controller.spawn({
token: process_token
}).startRTM();
var flag_owner = 'alefas';
function user_list(cb) {
bot.api.users.list({token: process_token}, function (err, json) {
cb(json.members)
});
}
function im_list(cb) {
bot.api.im.list({token: process_token}, function (err, json) {
cb(json.ims);
});
}
function user_id(username, cb) {
//todo: cache
user_list(function (userlist) {
userlist.forEach(function (element, i, arr) {
if (element.name == username) {
cb(element.id);
}
});
});
}
function im_id(userid, cb) {
im_list(function (imlist) {
var found = false;
imlist.forEach(function (element, index, array) {
if (element.user == userid) {
cb(element.id);
found = true;
}
});
if (!found) {
bot.api.im.open({token: process_token, user: userid}, function (err, json) {
if (!err) {
cb(json.channel.id)
}
})
}
});
}
//todo: move to DB
var scala_team_users = [
'alefas',
'nikolay.tropin',
'alexandra.vesloguzova',
'andrew.kozlov',
'dmitry.naydanov',
'kate.ustyuzhanina',
'mikhail.mutcianko',
'pavel.fatin',
'roman.shein'
];
function broadcast_to_team(message) {
scala_team_users.forEach(function (user, i, arr) {
user_id(user, function (userid) {
im_id(userid, function(imid) {
controller.startConversation(bot, {
text: 'Test',
user: userid,
channel: imid
}, function (err, convo) {
convo.say(message);
});
})
});
})
}
function schedule_team_reminder (days, hour, minute, message) {
var rule = new schedule.RecurrenceRule();
rule.dayOfWeek = days;
rule.hour = hour;
rule.minute = minute;
schedule.scheduleJob(rule, function () {
broadcast_to_team(message)
})
}
schedule_team_reminder([1, 2, 4, 5], 15, 59, "Daily meeting!");
schedule_team_reminder([3], 13, 57, "Weekly seminar!");