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'); module.exports = { 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))); 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; if (!client.cooldowns.has(cmd.name)) { client.cooldowns.set(cmd.name, new Collection()); } 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; if (timestamps.has(msg.author.id)) { const expirationTime = timestamps.get(msg.author.id) + cooldownAmount; 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); cmd.command(ctx).then(() => {}).catch(console.error); } } };