forked from blargbot/blargbot
-
Notifications
You must be signed in to change notification settings - Fork 0
/
catbot.js
149 lines (140 loc) · 5.62 KB
/
catbot.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
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
var Eris = require('eris');
const async = require('asyncawait/async');
const await = require('asyncawait/await');
var e = module.exports = {};
var db;
var config;
var bu;
var CAT_ID = '103347843934212096';
e.init = (blargutil, database) => {
bu = blargutil
db = database;
config = bu.config;
e.bot = new Eris.Client(config.catbot.token, {
autoReconnect: true,
disableEvents: {
PRESENCE_DATE: true,
VOICE_STATE_UPDATE: true,
TYPING_START: true
}
});
e.bot.on('ready', () => {
bu.logger.init('stupid cat> YO SHIT WADDUP ITS DA CAT HERE');
});
e.bot.on('messageCreate', async((msg) => {
var prefix = config.general.isbeta ? 'catbeta' : 'cat';
if (msg.content.startsWith(prefix)) {
var command = msg.content.replace(prefix, '').trim();
bu.logger.info('stupid cat>', msg.author.username, msg.author.id, prefix, command);
var words = command.split(' ');
switch (words.shift().toLowerCase()) {
case 'ping':
e.bot.createMessage('What is that supposed to mean?');
break;
case 'eval':
bu.logger.debug('evaling');
eval1(msg, words.join(' '));
break;
case 'eval2':
bu.logger.debug('eval2ing');
eval2(msg, words.join(' '));
break;
case 'avatar':
if (msg.author.id === CAT_ID) {
var request = require('request').defaults({ encoding: null });
var avatarUrl = '';
if (msg.attachments.length > 0) {
avatarUrl = msg.attachments[0].url;
} else if (words.length > 0) {
avatarUrl = words[0];
} else {
e.bot.createMessage(msg.channel.id, 'No URL given.');
}
request.get(avatarUrl, function (error, response, body) {
if (!error && response.statusCode == 200) {
let data = 'data:' + response.headers['content-type'] + ';base64,' + new Buffer(body).toString('base64');
bu.logger.debug(data);
var p1 = e.bot.editSelf({ avatar: data });
p1.then(function () {
e.bot.createMessage(msg.channel.id, ':ok_hand: Avatar set!');
});
}
});
}
break;
case 'pls': // yay markovs
let max = await(bu.r.table('catchat').count().run());
let position = await(bu.r.table('vars').get('markovpos').run()).varvalue;
if (!position) {
position = 0;
}
bu.logger.error(max);
if (max >= 300) {
var diff = getRandomInt(0, 300) - 150;
var pos = parseInt(position) + diff;
if (pos < 0) {
pos += max;
}
if (pos > max) {
pos -= max;
}
bu.logger.error('Getting message at pos', pos);
let message = await(bu.r.table('catchat').orderBy({ index: bu.r.desc('id') }).nth(pos));
var messageToSend = `${message.content} ${message.attachment == 'none' ? '' :
message.attachment}`;
e.bot.createMessage(msg.channel.id, `\u200B` + messageToSend);
bu.r.table('vars').get('markovpos').update({ varvalue: message.id }).run();
} else {
e.bot.createMessage(msg.channel.id, `I don't have a big enough sample size.`);
}
break;
}
}
}));
e.bot.connect();
};
function getRandomInt(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
function eval2(msg, text) {
if (msg.author.id == CAT_ID) {
var commandToProcess = text.replace('eval2 ', '');
bu.logger.debug(commandToProcess);
try {
e.bot.createMessage(msg.channel.id, `\`\`\`js
${eval(`${commandToProcess}.toString()`)}
\`\`\``);
} catch (err) {
e.bot.createMessage(msg.channel.id, err.message);
}
} else {
e.bot.createMessage(msg.channel.id, `You don't own me!`);
}
}
function eval1(msg, text) {
if (msg.author.id == CAT_ID) {
bu.logger.debug('fucking fuck', text);
var commandToProcess = text.replace('eval ', '');
if (commandToProcess.startsWith('```js') && commandToProcess.endsWith('```'))
commandToProcess = commandToProcess.substring(6, commandToProcess.length - 3);
else if (commandToProcess.startsWith('```') && commandToProcess.endsWith('```'))
commandToProcess = commandToProcess.substring(4, commandToProcess.length - 3);
try {
e.bot.createMessage(msg.channel.id, `Input:
\`\`\`js
${commandToProcess}
\`\`\`
Output:
\`\`\`js
${eval(commandToProcess)}
\`\`\``);
} catch (err) {
e.bot.createMessage(msg.channel.id, `An error occured!
\`\`\`js
${err.stack}
\`\`\``);
}
} else {
e.bot.createMessage(msg.channel.id, `You don't own me!`);
}
}