const { MessageEmbed } = require('discord.js'); const { inspect, promisify } = require('util'); class Functions { constructor (client) { this.client = client; }; userError (channel, cmd, error) { const embed = new MessageEmbed() .setColor('#EF5350') .setTitle(`${cmd.help.name}:${cmd.help.category.toLowerCase()}`) .setDescription(error) .addField('**Usage**', cmd.help.usage) .setFooter(`Run 'help ${cmd.help.name}' for more information.`); channel.send(embed); }; async getLastMessage (channel) { let messages = await channel.messages.fetch({ limit: 2 }); return messages.last().content; }; async awaitReply(message, question, limit = 60000) { const filter = (m) => m.author.id === message.author.id; await message.channel.send(question); try { const collected = await message.channel.awaitMessages(filter, { max: 1, time: limit, errors: ['time'] }); return collected.first().content; } catch (err) { return false; } } searchForMembers (guild, query) { query = query.toLowerCase(); let matches = []; let match; try { match = guild.members.cache.find(x => x.displayName.toLowerCase() == query); if (!match) guild.members.cache.find(x => x.user.username.toLowerCase() == query); } catch (err) {}; if (match) matches.push(match); guild.members.cache.forEach(member => { if ( (member.displayName.toLowerCase().startsWith(query) || member.user.tag.toLowerCase().startsWith(query)) && member.id != (match && match.id) ) { matches.push(member); }; }); return matches; }; findRole (input, message) { let role; role = message.guild.roles.cache.find(r => r.name.toLowerCase() === input.toLowerCase()); if(!role) { role = message.guild.roles.cache.get(input.toLowerCase()); }; if(!role) return; return role; }; intBetween (min, max) { return Math.round((Math.random() * (max - min) + min)); }; isDeveloper (id) { if (this.client.config.ownerIDs.includes(id)) { return true; } else { return false; }; }; shutdown () { const exitQuotes = [ 'Shutting down.', 'I don\'t blame you.', 'I don\'t hate you.', 'Whyyyyy', 'Goodnight.', 'Goodbye' ]; this.client.db.pool.end().then(() => { this.client.logger.info('Connection to database closed.') }); this.client.destroy(); console.log(exitQuotes); }; async clean (text) { if (text && text.constructor.name === 'Promise') { text = await text; }; if (typeof text !== 'string') { text = inspect(text, { depth: 1}); }; text = text .replace(/`/g, "`" + String.fromCharCode(8203)) .replace(/@/g, "@" + String.fromCharCode(8203)) .replace(this.client.token, "mfa.VkO_2G4Qv3T--NO--lWetW_tjND--TOKEN--QFTm6YGtzq9PH--4U--tG0"); return text; }; wait () { promisify(setTimeout); }; }; module.exports = Functions;