-
Notifications
You must be signed in to change notification settings - Fork 5
/
eos.js
322 lines (277 loc) · 11.3 KB
/
eos.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
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
var Discord = require("discord.js");
var client = new Discord.Client();
var fs = require("fs");
var sql = require('sqlite');
var prefix = (process.env.PREFIX);
var config = require("./config.json");
var dateformat = require("dateformat");
var commandJSON = require("./commands.json");
var jsonfile = require("jsonfile");
var mutes = require("./mutes.json");
//logs in using token
client.login(process.env.TOKEN);
var answers = [
"If I had a pound for every time someone tagged me, I'd be very poor. feelsbadman.",
"What do you want?",
"What am I, Google Assistant?",
"<https://www.youtube.com/watch?v=VeSyyu5JrLY>",
"If you want my opinion, Pineapple should go on pizza. It's a free world.",
"Hurin > Oscar.",
"Here's a snippet from my sourcecode:\n\`\`\`var answers = ['Here's a snippet from my sourcecode: ']\`\`\` \nPlease pay to view more.",
"Lootboxes aren't bad. They allow the developer to make more revenue to make the game better! \n*This message was sponsored by Electronic Arts*.",
"Hello, I am Lt. Kamada. I am in posession of USD$1,000,000,000 in untraceable bullion and I must get it out of this country, my country, liberia. \nWill you the help me?"
]
//sends ready echo to console
client.on('ready', () => {
console.log("Prefix is: " + prefix);
console.log("Shade is R E A D Y.");
client.user.setUsername("Shade")
.then(user => console.log("My name has changed to Shade."));
client.user.setActivity("!!help for help");
//client.user.setStatus("idle");
//mute function
client.setInterval(() => {
for(var i in mutes){
var time = mutes[i].time;
var guildID = mutes[i].guild;
var guild = client.guilds.get(guildID);
var member = guild.members.get(i)
var mutedRole = guild.roles.find(role => role.name.toLowerCase() === config[guild.id].muteRoleName.toLowerCase());
var logchannel = guild.channels.get(config[guild.id].modlogchannelID);
if(!logchannel){
logchannel = guild.channels.get(config[guild.id].logchannelID);
}
if(Date.now() > time){
member.removeRole(mutedRole);
delete mutes[i];
jsonfile.writeFileSync("./mutes.json", mutes, {spaces:4}, function(err){
if(err){
console.log(err);
}else{
console.log("Mute removed.");
}
})
const embed = new Discord.RichEmbed()
.addField("User unmuted", member.displayName)
.setColor(guild.member(client.user).highestRole.color)
.setFooter("Automatic mod logging")
.setTimestamp(new Date())
logchannel.send(`**Infraction for: **<@${member.id}>`, {embed})
}
}
}, 3000);
});
client.on("guildMemberRemove", member => {
var embed = new Discord.RichEmbed()
let guild = member.guild
embed.addField("User Left", member.user.username)
embed.addField("User Discriminator", member.user.discriminator, true)
embed.addField("User ID", member.user.id)
embed.setTimestamp(new Date())
embed.setColor(guild.member(client.user).highestRole.color)
embed.setThumbnail(member.user.avatarURL)
if(config[guild.id].disabledMisc.indexOf("memberLog") == -1){
var joinLogChannel = guild.channels.get(config[guild.id].joinLogChannel)
joinLogChannel.send(`${member.displayName} has left the server! Bye!`)
}
var logchannel = guild.channels.get(config[guild.id].joinlogchannelID)
if(!logchannel){
logchannel = guild.channels.get(config[guild.id].logchannelID)
}
logchannel.send({embed})
})
client.on("guildMemberAdd", member => {
var embed = new Discord.RichEmbed()
let guild = member.guild
var ruleschannel = guild.channels.find("name", "server-rules")
embed.addField("User Joined", member.user.username, true)
embed.addField("User Discriminator", member.user.discriminator, true)
embed.addField("User ID", member.user.id)
embed.addField("User account creation date", member.user.createdAt)
embed.setTimestamp(new Date())
embed.setColor(guild.member(client.user).highestRole.color)
embed.setThumbnail(member.user.avatarURL)
var joinLogChannel = guild.channels.get(config[guild.id].joinLogChannel)
if(config[guild.id].disabledMisc.indexOf("memberLog") == -1){
joinLogChannel.send(`${member.displayName} has joined the server! Welcome!`)
}
var logchannel = guild.channels.get(config[guild.id].joinlogchannelID)
if(!logchannel){
logchannel = guild.channels.get(config[guild.id].logchannelID)
}
logchannel.send({embed})
})
client.on("messageDelete", message => {
if(message.author.id === client.user.id){
return;
}
var guild = message.guild
var embed = new Discord.RichEmbed()
.setAuthor("Message Deleted")
.addField("Message Author", `${message.author.username}#${message.author.discriminator}`, false)
.setColor(guild.member(client.user).highestRole.color)
.setThumbnail(message.author.avatarURL)
.setTimestamp(new Date());
if(!message.content){
return;
}else{
if(message.content.length >= 1023){
embed.addField("Message Content", "Too long to post", false)
}else{
embed.addField("Message Content", message.content, false)
}
}
embed.addField("Channel", "#" + message.channel.name);
var logchannel = guild.channels.get(config[guild.id].messagelogchannelID)
if(!logchannel){
logchannel = guild.channels.get(config[guild.id].logchannelID)
}
logchannel.send(`**Message delete log for: **${message.author.tag}`, {embed})
})
client.on("messageUpdate", (oldMessage, newMessage) => {
if(oldMessage.content.length == 0 || oldMessage.author.id === client.user.id || oldMessage.content == newMessage.content){
return;
}else if(newMessage.content.length == 0 || newMessage.author.id === client.user.id){
return;
}
var guild = newMessage.guild
var embed = new Discord.RichEmbed()
.setAuthor("Message Edited")
.addField("Message Author", `${newMessage.author.tag}`, false)
.addField("Old Message Content", oldMessage.content, false)
.addField("New Message Content", newMessage.content, false)
.addField("Channel", "#" + newMessage.channel.name)
.setColor(guild.member(client.user).highestRole.color)
.setThumbnail(newMessage.author.avatarURL)
.setTimestamp(new Date())
var logchannel = guild.channels.get(config[guild.id].messagelogchannelID)
if(!logchannel){
logchannel = guild.channels.get(config[guild.id].logchannelID)
}
var userTagForMessage = newMessage.author.tag
if(!userTagForMessage){
userTagForMessage = oldMessage.author.tag
}
logchannel.send(`**Message edit log for: **${userTagForMessage}`, {embed})
})
client.on("voiceStateUpdate", (oldMember, newMember) => {
var embed = new Discord.RichEmbed();
var guild = oldMember.guild
var user = newMember.user
var voicelogchannel = guild.channels.get(config[guild.id].voicelogchannelID)
if(!voicelogchannel || voicelogchannel === "null"){
voicelogchannel = guild.channels.get(config[guild.id].logchannelID)
}
if(!user){
user = newMember.user
}
if(!oldMember.voiceChannel){
embed.addField("User joined a voice channel", `${user.tag} joined ${newMember.voiceChannel.name}.`, true)
}else if(!newMember.voiceChannel){
embed.addField("User disconnected from voice channels", `${user.tag} left ${oldMember.voiceChannel.name}.`, true)
}else{
embed.setAuthor(`${user.tag} changed voice channels.`)
if((oldMember.mute == true) || (oldMember.deaf == true) || (newMember.mute == true) || (newMember.deaf == true)){
return;
}else{
embed.addField("Old channel", `${oldMember.voiceChannel.name}`, true)
embed.addField("New channel", `${newMember.voiceChannel.name}`, true)
}
}
embed.addField("User ID", newMember.id)
embed.setColor(newMember.guild.member(client.user).highestRole.color)
embed.setTimestamp(newMember.createdAt)
var userTagForMessage = user.tag
if(!userTagForMessage){
userTagForMessage = user.tag
}
voicelogchannel.send(`**Voice Log Information for: **${userTagForMessage}`, {embed}).catch(console.log)
})
//ON CLIENT JOIN (CONFIG SETUP)
client.on("guildCreate", guild =>{
var logchannelIDFinder = guild.channels.find("name", "log-channel").id;
if(!logchannelIDFinder){
logchannelIDFinder = "null"
}
if(!config[guild.id]){
config[guild.id] = {
"disabledCommands" : "null",
"disabledEvents" : "null",
"disabledMisc" : "memberLog",
"disabledAutoMod" : "null",
"logchannelID" : logchannelIDFinder,
"modlogchannelID" : "null",
"voicelogchannelID" : "null",
"autoCleanUpBlacklist" : "null",
"muteRoleName" : "Muted",
"muteMessage" : "null",
"selfRoles" : "null",
"joinLogChannel" : "null"
}
jsonfile.writeFile("config.json", config, {spaces: 4}, err =>{
if(!err){
const embed = new Discord.RichEmbed()
.addField("Welcome to the Shade Community!", "Thanks for adding Shade!")
.addField("I highly reccomend you check out the following link for info:", "https://veraxonhd.gitbooks.io/shade-modbot/content/first-time-setup.html")
.setColor("#30167c");
guild.owner.send({embed}).catch(console.log);
}else{
console.log(err);
}
})
}else{
return
}
})
// This loop reads the /events/ folder and attaches each event file to the appropriate event.
fs.readdir("./events/", (err, files) => {
if (err) return console.error(err);
files.forEach(file => {
let eventFunction = require(`./events/${file}`);
let eventName = file.split(".")[0];
// super-secret recipe to call events with all their proper arguments *after* the `client` var.
client.on(eventName, (...args) => eventFunction.run(client, ...args));
});
});
//GENERAL COMMANDS
client.on("message", message => {
if(message.channel.type === "dm") return;
let guild = message.guild;
var logchannel = guild.channels.get(config[guild.id].logchannelID);
var commandDir = fs.readdirSync("./commands");
let args = message.content.split(" ").slice(1);
/*
BROKEN - repeats messages for no known reason.
if(!logchannel){
message.channel.send("`Shade Critical Error` - There is no base log channel. You must set one up to use any of Shade's commands. Consult the docs.");
return;
}*/
if(message.content === `<@${client.user.id}>`){
var randomAnswer = answers[Math.floor(Math.random() * answers.length)];
message.channel.send(randomAnswer)
}
if(!message.content.startsWith(prefix)) return;
exports.noPermReact = () => {
return message.channel.send(`Shade - \`Error\` - You do not have permission to perform that command.`)
.then(message => message.react('❎'))
};
let command = message.content.split(" ")[0];
command = command.slice(prefix.length);
try {
if(command == "ui"){
command = "userinfo"
}
let commandFile = require(`./commands/${command}.js`);
var serverid = guild.id;
if(config[guild.id].disabledCommands.indexOf(command) == -1){
commandFile.run(client, message, args, Discord, guild, command)
}else{
return(message.channel.send("This command has been disabled by a server administrator."))
}
} catch (err) {
console.log(err)
}
});
process.on("unhandledRejection", err => {
console.error("Uncaught Promise Error: \n", err);
});