-
-
Notifications
You must be signed in to change notification settings - Fork 62
/
ChatHandler.js
69 lines (55 loc) · 1.98 KB
/
ChatHandler.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
class ChatHandler {
constructor(bot, config) {
this.bot = bot;
config = config || {};
this.allowSelf = !!config.allowSelf;
this.allowBots = !!config.allowBots;
this.awaits = {};
this._nextAwaitId = 0;
this.defaultHelpCommand = config.defaultHelpCommand !== undefined;
if (this.defaultHelpCommand === true) {
this.help = {
prefix: config.defaultHelpCommand.prefix || '!',
before: config.defaultHelpCommand.before || '',
after: config.defaultHelpCommand.after || ''
}
}
this.messageHandler = message => {
if ((message.author.id === this.bot.user.id && this.allowSelf === false) ||
(message.author.bot && this.allowBots === false) ||
(message.channel.guild && this.bot.blacklistedGuilds.includes(message.channel.guild.id)) ||
this.bot.blacklistedUsers.includes(message.author.id))
return;
//console.log(message.channel.name, ':', message.author.username, ':', message.content);
if (this.defaultHelpCommand && message.content === this.help.prefix + 'help')
this.getHelp(message);
this.bot.commandPlugins.forEach(plugin => {
plugin.handle(message);
});
for (let id in this.awaits) {
if (this.awaits[id].trigger(message)) {
this.awaits[id].action(message);
delete this.awaits[id];
}
}
};
}
run() {
this.bot.on('messageCreate', this.messageHandler);
}
stop() {
this.bot.removeListener('messageCreate', this.messageHandler);
}
getHelp(message) {
message.channel.createMessage(`${this.help.before + '\n' || ''}${this.bot.commandPlugins.map(plugin => plugin.help).filter(help => !!help).join('\n')}${this.help.after ? '\n' + this.help.after : ''}`);
}
awaitMessage(trigger, action, timeout) {
if (typeof trigger !== 'function' || typeof action !== 'function')
return new Error('Trigger and action must be functions');
let id = this._nextAwaitId++;
this.awaits[id] = {trigger, action};
if (timeout)
setTimeout(() => { delete this.awaits[id]; }, timeout);
}
}
module.exports = ChatHandler;