-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.js
More file actions
154 lines (101 loc) · 4.6 KB
/
index.js
File metadata and controls
154 lines (101 loc) · 4.6 KB
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
const Discord = require("discord.js");
const client = new Discord.Client();
const readline = require('readline');
const fs = require("fs");
const config = require("./config.json");
const m = require("./shared/methods.js");
const modChannel = "yerbot-mod";
var logChannelID = config.logChannelID;
// 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));
});
});
client.on("guildMemberAdd", (member) => {
//When new user joins
m.logNoMsg(config, client, `New user "${member.user.username}#${member.user.discriminator}" with ID \`${member.id}\` [ <@${member.id}> ] joining ${member.guild.name} with guild ID \`${member.guild.id}\``);
//Auto ban
//ALL-RIGHT LISTEN UP
//I'm lazy and the code below is awful, I'll improve it one day maybe...
let autoBanner = require("./autoban.js");
autoBanner.memberJoin(config, client, member, modChannel);
});
client.on("message", message => {
if (message.channel.id == config.spFrom) {
var d = message.createdAt;
var timeS = d.getUTCFullYear() + "/" + m.lZero((d.getUTCMonth() + 1), 2) + "/" + m.lZero(d.getUTCDate(), 2) + " " + m.lZero(d.getUTCHours(), 2) + ":" + m.lZero(d.getUTCMinutes(), 2) + ":" + m.lZero(d.getUTCSeconds(), 2);
client.channels.get(spTo).send(timeS + " " + message.author + ": " + message.content);
}
//Delete mee6 welcomes from banned users
if(message.author.bot){
if(true){
//used to be message.author.username == "MEE6"
//Wait 2 seconds after mee6 message sent to ensure the user has been banned already.
//Potential race condition between yerbot and mee6, can potentially fail sometimes.
const util = require('util');
const timeoutPromise = util.promisify(setTimeout);
if(message.content.includes("<@") && message.content.includes(">") && message.channel.name.includes("welcome"))
{
timeoutPromise(2500).then(()=>{
//RegEx magic to get the ID
var welcomeID = /<@!?([0-9]{15,20})>/.exec(message.content)[1]
message.guild.fetchBans()
.then(bans =>{
if(bans.has(welcomeID))
{
//The user mentioned in the welcome has in fact been banned...
m.log(config, client, message, "**MESSAGE DELETED BECAUSE USER BANNED**");
if(message.deletable)
message.delete();
}
}).catch((err) => {console.log("fetching bans failed"+err)});
}).catch((err) => {console.log("timeout failed"+err)});
}
}
}
if (message.channel.type == "dm"){
let autoBanner = require("./autoban.js");
autoBanner.dm(config, client, message, modChannel);
}
if (message.author.bot) return;
if (message.channel.type != "text") return;
if (message.content.indexOf(config.prefix) !== 0) return;
// This is the best way to define args. Trust me.
const argsArr = message.content.slice(config.prefix.length).trim().split(/ +/g);
const command = argsArr.shift().toLowerCase().replace(/[^a-zA-Z ]/g, "");
const argsTxt = message.content.slice(config.prefix.length + command.length).trim();
const extraData = "";
// The list of if/else is replaced with those simple 2 lines:
try {
let commandFile = require(`./commands/${command}.js`);
commandFile.run(config, client, message, argsArr, argsTxt, extraData);
} catch (err) {
var err1 = "```" + err.stack + "```";
var rawErr1 = err;
try {
let commandFile = require(`./commands/alias/${command}.js`);
commandFile.run(config, client, message, argsArr, argsTxt, extraData);
} catch (err) {
var err2 = "```" + err + "```";
var rawErr2 = err;
if (rawErr2.code == 'MODULE_NOT_FOUND' && rawErr1.code == 'MODULE_NOT_FOUND') {
} else {
var msg = `***Some error occured!***\r\n<@${config.ownerID}> Check the logs for the detailed error message and fix it!!`;
message.channel.send(msg);
msg += "\r\n\r\nERR1:\r\n" + err1;
msg += "\r\n\r\nERR2:\r\n" + err2;
m.log(config, client, message, msg, "e");
};
}
//console.error(err1);
}
});
client.on('error', error => {
console.error('The WebSocket encountered an error:', error);
});
client.login(config.token);