-
Notifications
You must be signed in to change notification settings - Fork 0
/
gotMessage.js
131 lines (108 loc) · 4.65 KB
/
gotMessage.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
const fs = require('fs');
const Discord = require('discord.js');
const cooldowns = new Discord.Collection();
module.exports = async function (msg, bancho) {
//check if the message wasn't sent by the bot itself or another bot
if (!(msg.author.bot) || msg.channel.id === '892873577479692358') {
//Create a collection for the commands
msg.client.commands = new Discord.Collection();
//get all command files
const commandFiles = fs.readdirSync('./commands').filter(file => file.endsWith('.js'));
//Add the commands from the command files to the client.commands collection
for (const file of commandFiles) {
const command = require(`./commands/${file}`);
// set a new item in the Collection
// with the key as the command name and the value as the exported module
msg.client.commands.set(command.name, command);
}
const prefix = 'e!';
//Define if it is a command with prefix
//Split the message into an args array
let prefixCommand;
let args;
if (msg.content.startsWith(prefix)) {
prefixCommand = true;
args = msg.content.slice(prefix.length).trim().split(/ +/);
} else {
args = msg.content.trim().split(/ +/);
}
//Delete the first item from the args array and use it for the command variable
let commandName = args.shift().toLowerCase();
//Set the command and check for possible uses of aliases
let command = msg.client.commands.get(commandName)
|| msg.client.commands.find(cmd => cmd.aliases && cmd.aliases.includes(commandName));
if (!command) {
return;
}
//Check if prefix has to be used or not
if (command.prefixCommand !== prefixCommand) return;
//Check if the command can't be used outside of DMs
if (command.guildOnly && msg.channel.type === 'DM') {
return msg.reply('I can\'t execute that command inside DMs!');
}
//Check permissions of the user
if (command.permissions) {
const authorPerms = msg.channel.permissionsFor(msg.member);
if (!authorPerms || !authorPerms.has(command.permissions)) {
return msg.reply(`You need the ${command.permissionsTranslated} permission to do this!`);
}
}
//Check permissions of the bot
if (msg.channel.type !== 'DM') {
const botPermissions = msg.channel.permissionsFor(await msg.guild.members.fetch(msg.client.user.id));
if (!botPermissions || !botPermissions.has(Permissions.FLAGS.SEND_MESSAGES) || !botPermissions.has(Permissions.FLAGS.READ_MESSAGE_HISTORY)) {
//The bot can't possibly answer the message
return;
}
//Check the command permissions
if (command.botPermissions) {
if (!botPermissions.has(command.botPermissions)) {
return msg.reply(`I need the ${command.botPermissionsTranslated} permission to do this!`);
}
}
}
//Check if arguments are provided if needed
if (command.args && !args.length) {
//Set standard reply
let reply = 'You didn\'t provide any arguments.';
//Set reply with usage if needed.
if (command.usage) {
reply += `\nThe proper usage would be: \`${prefix}${command.name} ${command.usage}\``;
}
//Send message
return msg.reply(reply);
}
//Check if the cooldown collection has the command already; if not write it in
if (!cooldowns.has(command.name)) {
cooldowns.set(command.name, new Discord.Collection());
}
//Set current time
const now = Date.now();
//gets the collections for the current command used
const timestamps = cooldowns.get(command.name);
//set necessary cooldown amount; if non stated in command default to 5; calculate ms afterwards
const cooldownAmount = (command.cooldown || 5) * 1000;
//get expiration times for the cooldowns for the authorId
if (timestamps.has(msg.author.id)) {
const expirationTime = timestamps.get(msg.author.id) + cooldownAmount;
//If cooldown didn't expire yet send cooldown message
if (command.noCooldownMessage) {
return;
} else if (now < expirationTime) {
const timeLeft = (expirationTime - now) / 1000;
return msg.reply(`Please wait ${timeLeft.toFixed(1)} more second(s) before reusing the \`${command.name}\` command.`);
}
}
//Automatically delete the timestamp after the cooldown
setTimeout(() => timestamps.delete(msg.author.id), cooldownAmount);
try {
let additionalObjects = [msg.client, bancho];
command.execute(msg, args, null, additionalObjects);
} catch (error) {
console.error(error);
const eliteronixUser = await msg.client.users.cache.find(user => user.id === '138273136285057025');
msg.reply('There was an error trying to execute that command. The developers have been alerted.');
eliteronixUser.send(`There was an error trying to execute a command.\n\nMessage by ${msg.author.username}#${msg.author.discriminator}: \`${msg.content}\`\n\n${error}`);
}
}
};