thaldrin/DiscordEvents/message.js

84 lines
2.8 KiB
JavaScript
Raw Normal View History

2019-11-10 08:42:09 +00:00
const { Collection } = require('discord.js');
const { table } = require('quick.db');
const Servers = new table('servers');
const Users = new table('users');
const Backend = new table('backend');
2019-10-09 16:19:30 +00:00
module.exports = {
2019-11-10 08:42:09 +00:00
name: 'message',
run: async (client, msg) => {
//if (msg.author.id !== '318044130796109825') return;
if (msg.author.bot) return;
const DefaultPrefix = client.config.prefixes;
const CustomPrefix = Servers.get(msg.guild.id);
if (!CustomPrefix) {
PrefixArray = [ DefaultPrefix /* , CustomPrefix */ ].flat(Infinity);
} else {
PrefixArray = [ DefaultPrefix, CustomPrefix.prefix ].flat(Infinity);
}
let PREFIX;
let EXISTS;
for (p in PrefixArray) {
if (msg.content.startsWith(PrefixArray[p])) {
EXISTS = true;
PREFIX = p;
}
}
if (!EXISTS) return;
const args = msg.content.slice(PrefixArray[PREFIX].length).trim().split(/ +/g);
const command = args.shift().toLowerCase();
const cmd = client.commands.find((c) => c.name == command || (c.aliases && c.aliases.includes(command)));
2019-10-09 16:19:30 +00:00
2019-11-10 08:42:09 +00:00
const ctx = {
send: msg.channel.send.bind(msg.channel),
client,
msg,
args,
command: cmd,
me: msg.guild.me,
guild: msg.guild,
channel: msg.channel,
author: msg.author,
member: msg.member,
db: { users: Users, servers: Servers, backend: Backend },
utils: require('../utils'),
config: require('../config'),
isDeveloper: client.config.developers.find((dev) => msg.author.id == dev.id)
};
if (!cmd) return;
2019-10-14 11:19:41 +00:00
2019-11-10 08:42:09 +00:00
if (!client.cooldowns.has(cmd.name)) {
client.cooldowns.set(cmd.name, new Collection());
}
2019-10-09 16:19:30 +00:00
2019-11-10 08:42:09 +00:00
if (cmd.guildOnly && !msg.guild) return;
if (cmd.nsfw && !ctx.channel.nsfw)
return ctx.send('This channel is not marked as NSFW, please mark it as such and rerun this command.');
if (cmd.developerOnly && !client.config.developers.find((dev) => msg.author.id == dev.id)) return;
if (cmd.AuthorPermissions !== 'NONE' && !ctx.member.permissions.has(cmd.AuthorPermissions))
return ctx.send(`You need \`${cmd.AuthorPermissions}\` Permission(s) to run this Command`);
const now = Date.now();
const timestamps = client.cooldowns.get(cmd.name);
const cooldownAmount = (cmd.cooldown || 1) * 1000;
2019-10-09 16:19:30 +00:00
2019-11-10 08:42:09 +00:00
if (timestamps.has(msg.author.id)) {
const expirationTime = timestamps.get(msg.author.id) + cooldownAmount;
2019-10-09 16:19:30 +00:00
2019-11-10 08:42:09 +00:00
if (now < expirationTime) {
const timeLeft = (expirationTime - now) / 1000;
return ctx.send(
`\`${cmd.name}\` has a cooldown of \`${cmd.cooldown} second${cmd.cooldown > 1
? 's'
: ''}\`, wait \`${`${Math.round(timeLeft)} second${Math.round(timeLeft) > 1
? 's'
: ''}`.replace('0 second', 'just a second longer')}\` before trying to use it again.`
);
}
} else {
timestamps.set(msg.author.id, now);
setTimeout(() => timestamps.delete(msg.author.id), cooldownAmount);
2019-10-09 16:19:30 +00:00
2019-11-10 08:42:09 +00:00
cmd.command(ctx).then(() => {}).catch(console.error);
}
}
2019-10-09 16:19:30 +00:00
};