forked from TheOdinProject/odin-bot-v2
-
Notifications
You must be signed in to change notification settings - Fork 0
/
botEngine.js
110 lines (92 loc) · 2.95 KB
/
botEngine.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
const botCommands = [];
let authorBuffer = []
let creationsMessage = null
const createAuthorEntry = function(message) {
const entry = {
author: message.author.id,
timeOut: false
}
setTimeout(function(){
entry.timeOut = true
}, 60000)
return entry
}
const flushAuthorEntries = function() {
authorBuffer = authorBuffer.filter(entry => entry.timeOut == false)
}
function registerBotCommand(regex, fn) {
botCommands.push({ regex, fn });
}
async function listenToMessages(client) {
client.on("message", async message => {
// Prevent bot from responding to its own messages
if (message.author === client.user) {
return;
}
const regex = new RegExp("ok", "i");
const NOBOT_ROLE_ID = "783764176178774036";
// can't bot if user is NOBOT
if (
message.author &&
message.author.lastMessage &&
message.author.lastMessage.member &&
message.author.lastMessage.member.roles &&
message.author.lastMessage.member.roles.has(NOBOT_ROLE_ID)
) {
return;
}
if (
message.channel.id === '693255421607280670' &&
message.member.roles.find(role => role.name === 'loki?')
) {
if (regex.test(message))
{
message.channel.send(`Hello there, ${message.author}! It seems you misunderstood our instructions. Please return to <#693244715839127653> and read carefully.`);
}
else
{
message.channel.send(`Hello ${message.author}! If you haven't yet, go read the <#693244715839127653> for instructions on how to access the rest of our discord server.
If you are still having trouble after following the instructions, DM a Maintainer or Core member.`);
}
return;
} else if (message.channel.id === '627445384297316352') { // creations-showcase
if (creationsMessage) {
creationsMessage.delete()
}
creationsMessage = await message.channel.send("Reminder: This channel is for posting links to your creations only. You can discuss the projects posted here in the sibling channel <#634025871614803968>");
return;
}
const authorEntryCount = authorBuffer.reduce((count, current) => {
if (current.author == message.author.id) {
return count + 1
}
},0)
flushAuthorEntries()
if (authorEntryCount > 10) {
console.log('DENIED')
return
}
botCommands.forEach(async ({ regex, fn }) => {
if (process.argv.includes("dev") && message.channel.type != 'dm') {
return
}
if (message.content.toLowerCase().match(regex)) {
authorBuffer.push(createAuthorEntry(message))
try {
const response = await fn(message);
if (response) {
try {
message.channel.send(response);
} catch (e) {
console.log(e);
}
}
}
catch(e) {
console.log(e)
}
}
});
});
}
module.exports = { listenToMessages, registerBotCommand };