-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathbot.js
executable file
·128 lines (108 loc) · 3.75 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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ROSE BOT
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
if (!process.env.token) {
console.log('Error: Specify token in environment');
process.exit(1);
}
var Botkit = require('./lib/Botkit.js');
var os = require('os');
var request = require('request');
var apiMenuCommand = require('./lib/apiMenuCommands.js');
var controller = Botkit.slackbot({
debug: true
});
var bot = controller.spawn({
token: process.env.token
}).startRTM();
var port = (process.env.PORT || 5000);
controller.setupWebserver(port, function (err, webserver) {
controller.createWebhookEndpoints(controller.webserver);
});
controller.on('slash_command', function(bot, message) {
apiMenuCommand.onApiCommand(bot, message);
});
controller.hears(['hello', 'hi'], 'direct_message,direct_mention,mention', function (bot, message) {
bot.api.reactions.add({
timestamp: message.ts,
channel: message.channel,
name: 'robot_face',
}, function (err, res) {
if (err) {
bot.botkit.log('Failed to add emoji reaction :(', err);
}
});
controller.storage.users.get(message.user, function (err, user) {
if (user && user.name) {
bot.reply(message, 'Hello ' + user.name + '!!');
} else {
bot.reply(message, 'Hello.');
}
});
});
controller.hears(['call me (.*)'], 'direct_message,direct_mention,mention', function (bot, message) {
var matches = message.text.match(/call me (.*)/i);
var name = matches[1];
controller.storage.users.get(message.user, function (err, user) {
if (!user) {
user = {
id: message.user,
};
}
user.name = name;
controller.storage.users.save(user, function (err, id) {
bot.reply(message, 'Got it. I will call you ' + user.name + ' from now on.');
});
});
});
controller.hears(['what is my name', 'who am i'], 'direct_message,direct_mention,mention', function (bot, message) {
controller.storage.users.get(message.user, function (err, user) {
if (user && user.name) {
bot.reply(message, 'Your name is ' + user.name);
} else {
bot.reply(message, 'I don\'t know yet!');
}
});
});
controller.hears(['shutdown'], 'direct_message,direct_mention,mention', function (bot, message) {
bot.startConversation(message, function (err, convo) {
convo.ask('Are you sure you want me to shutdown?', [
{
pattern: bot.utterances.yes,
callback: function (response, convo) {
convo.say('Go fuck yourself!');
convo.next();
}
},
{
pattern: bot.utterances.no,
default: true,
callback: function (response, convo) {
convo.say('*Phew!*');
convo.next();
}
}
]);
});
});
controller.hears(['uptime', 'identify yourself', 'who are you', 'what is your name'], 'direct_message,direct_mention,mention', function (bot, message) {
var hostname = os.hostname();
var uptime = formatUptime(process.uptime());
bot.reply(message, ':robot_face: I am a bot named <@' + bot.identity.name + '>. I have been running for ' + uptime + ' on ' + hostname + '.');
});
function formatUptime(uptime) {
var unit = 'second';
if (uptime > 60) {
uptime = uptime / 60;
unit = 'minute';
}
if (uptime > 60) {
uptime = uptime / 60;
unit = 'hour';
}
if (uptime != 1) {
unit = unit + 's';
}
uptime = uptime + ' ' + unit;
return uptime;
}