-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
171 lines (157 loc) · 6.29 KB
/
index.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
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
const Discord = require('discord.js');
const Moment = require('moment');
const QuickChart = require('quickchart-js');
const keep_alive = require('./alive.js');
const client = new Discord.Client();
const TrackedWords = require('./TrackedWords');
const WordCounts = require('./WordCounts');
const Embeds = require('./Embeds');
client.on('ready', async () => {
client.user.setActivity('!help');
await TrackedWords.connect();
await WordCounts.connect();
await console.log('ready!');
});
client.on('message', async (msg) => {
if (msg.content.startsWith('!')) { //prefix
let fullCmd = msg.content.split(' ');
let cmd = fullCmd[0].substring(1);
if (cmd === "add") {
if (fullCmd.length < 3) {
await msg.channel.send({
embed: Embeds.getErrorEmbed('Not enough arguments. Please use: `!add <user> <word>`')
});
return;
}
let user = fullCmd[1].replace("<@!","").replace(">","");
let word = fullCmd[2];
try {
let result = await TrackedWords.dbInsert(msg.guild.id,word,user);
if (result) {
await msg.channel.send({
embed: Embeds.getSuccessEmbed(`Successfully addded ${word}.`)
});
} else {
await msg.channel.send({
embed: Embends.getErrorEmbed(`${word} is already being tracked.`)
});
}
} catch (e) {
console.log(e);
}
}
if (cmd === "list") {
let res = await TrackedWords.dbGet(msg.guild.id);
let words = res.map(x => x.word).join("\n");
let users = res.map(x => client.users.cache.find(y => y.id = x.user_id)).join("\n");
const embed = new Discord.MessageEmbed()
.setColor('#ED6B6B')
.setTitle('Current Trackers')
.addFields(
{name:'Word:', value: words, inline:true},
{name:'User:', value: users, inline:true}
);
msg.channel.send({embed});
}
if (cmd === "remove") {
if (fullCmd.length < 3) {
await msg.channel.send({
embed: Embeds.getErrorEmbed('Not enough arguments. Please use: `!remove <user> <word>`')
});
return;
}
let user = fullCmd[1].replace("<@!","").replace(">","");
let word = fullCmd[2];
try {
let res = await TrackedWords.dbDelete(msg.guild.id, word, user);
await msg.channel.send(res ? {
embed: Embeds.getSuccessEmbed(`Removed ${word}`)
} : {
embed: Embeds.getErrorEmbed('Tracker does not exist.')
});
} catch (e) {
console.log(e);
}
}
if (cmd === "count") {
let user = fullCmd[1].replace("<@!","").replace(">","");
let word = fullCmd[2];
let tracker = await TrackedWords.dbGet(msg.guild.id, word, user);
if (!tracker[0]) {
await msg.channel.send({
embed: Embeds.getErrorEmbed('Could not find the requested tracker. Make sure you are using the format `!count <user> <word>`')
});
} else {
let res = await WordCounts.dbCount(tracker[0]._id);
await msg.channel.send({
embed: Embeds.getResultEmbed(`${msg.guild.member(user).nickname} has said ${word} ${res} times.`)
});
}
}
if (cmd === "chart") {
let user = fullCmd[1].replace("<@!","").replace(">","");
let word = fullCmd[2];
let tracker = await TrackedWords.dbGet(msg.guild.id, word, user);
if (!tracker[0]) {
await msg.channel.send({
embed: Embeds.getErrorEmbed('Could not find the requested tracker. Make sure you are using the format `!chart <user> <word>`')
});
} else {
const myChart = new QuickChart();
let _dates = [];
let _data = [];
for (let i = 0; i < 5; i++) {
let d = Moment().subtract(i,'days');
_dates.unshift(d.format("MMM DD"));
let res = await WordCounts.dbCount(tracker[0]._id, d);
_data.unshift(res);
}
console.log(_dates);
console.log(_data);
myChart.setConfig({
type: 'line',
data: {labels: _dates, datasets: [{label: `${word}`,data: _data, lineTension: 0.4}]},
options: {
scales: {
y: {
min: 0
}
}
}
});
await msg.channel.send(myChart.getUrl());
}
}
if (cmd === "help") {
await msg.channel.send({
embed: Embeds.getHelpEmbed(
"`!add <user> <word>`\n"+
"Adds a word to be tracked\n\n"+
"`!list`\n"+
"Lists all tracked words\n\n"+
"`!remove <user> <word>`\n"+
"Removes a currently tracked word\n\n"+
"`!count <user> <word>`\n"+
"Gets the amount of times the word has been said\n\n"+
"`!chart <user> <word>`\n"+
"Plots the occurances of words over a period of 5 days"
)
});
}
} else {
//text tracking (not a command)
let res = await TrackedWords.dbGet(msg.guild.id, null, msg.author.id);
res.forEach((tracker) => {
if (msg.content.includes(tracker.word)) {
//insert into db
console.log(new Date());
let success = WordCounts.dbUpsert(tracker._id, new Date());
//console.log(success);
}
});
}
});
process.on('exit', () => {
console.log('exiting...');
});
client.login(process.env['token']);