forked from embee/woomy
		
	resorted _functions
This commit is contained in:
		
							parent
							
								
									bb2239bda1
								
							
						
					
					
						commit
						33f76c959a
					
				
					 1 changed files with 139 additions and 137 deletions
				
			
		| 
						 | 
					@ -1,137 +1,11 @@
 | 
				
			||||||
 | 
					// Functions in this file are bound to the client object, and available basically anywhere.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const { MessageEmbed } = require('discord.js')
 | 
					const { MessageEmbed } = require('discord.js')
 | 
				
			||||||
const mongoose = require('mongoose')
 | 
					const mongoose = require('mongoose')
 | 
				
			||||||
const Guild = require('../models/guild')
 | 
					const Guild = require('../models/guild')
 | 
				
			||||||
const User = require('../models/user')
 | 
					const User = require('../models/user')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
module.exports = client => {
 | 
					module.exports = client => {
 | 
				
			||||||
  // Permission level function
 | 
					 | 
				
			||||||
  client.permlevel = (message, settings) => {
 | 
					 | 
				
			||||||
    let permlvl = 0
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    const permOrder = client.config.permLevels.slice(0).sort((p, c) => p.level < c.level ? 1 : -1)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    while (permOrder.length) {
 | 
					 | 
				
			||||||
      const currentLevel = permOrder.shift()
 | 
					 | 
				
			||||||
      if (message.guild && currentLevel.guildOnly) continue
 | 
					 | 
				
			||||||
      if (currentLevel.check(message, settings)) {
 | 
					 | 
				
			||||||
        permlvl = currentLevel.level
 | 
					 | 
				
			||||||
        break
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    return permlvl
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Get guild settings
 | 
					 | 
				
			||||||
  client.findOrCreateGuild = async (guild) => {
 | 
					 | 
				
			||||||
    const data = await Guild.findOne({ guildID: guild.id })
 | 
					 | 
				
			||||||
    if (data) {
 | 
					 | 
				
			||||||
      return data
 | 
					 | 
				
			||||||
    } else {
 | 
					 | 
				
			||||||
      const merged = Object.assign({ _id: mongoose.Types.ObjectId() }, { guildID: guild.id })
 | 
					 | 
				
			||||||
      const newGuild = await new Guild(merged)
 | 
					 | 
				
			||||||
      return newGuild.save()
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Update guild settings
 | 
					 | 
				
			||||||
  client.updateGuild = async (guild, settings) => {
 | 
					 | 
				
			||||||
    let data = await client.findOrCreateGuild(guild)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if (typeof data !== 'object') data = {}
 | 
					 | 
				
			||||||
    for (const key in settings) {
 | 
					 | 
				
			||||||
      if (data[key] !== settings[key]) {
 | 
					 | 
				
			||||||
        data[key] = settings[key]
 | 
					 | 
				
			||||||
      } else return
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    return data.updateOne(settings)
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Delete guild settings
 | 
					 | 
				
			||||||
  client.deleteGuild = async (guild) => {
 | 
					 | 
				
			||||||
    const data = await client.findOrCreateGuild(guild)
 | 
					 | 
				
			||||||
    if (data) {
 | 
					 | 
				
			||||||
      data.deleteOne({ guildID: guild.id })
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Get user settings
 | 
					 | 
				
			||||||
  client.findOrCreateUser = async (user) => {
 | 
					 | 
				
			||||||
    const data = await User.findOne({ userID: user.id })
 | 
					 | 
				
			||||||
    if (data) {
 | 
					 | 
				
			||||||
      return data
 | 
					 | 
				
			||||||
    } else {
 | 
					 | 
				
			||||||
      const merged = Object.assign({ _id: mongoose.Types.ObjectId() }, { userID: user.id })
 | 
					 | 
				
			||||||
      const newUser = await new User(merged)
 | 
					 | 
				
			||||||
      return newUser.save()
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Update user settings
 | 
					 | 
				
			||||||
  client.updateUser = async (user, settings) => {
 | 
					 | 
				
			||||||
    let data = await client.findOrCreateUser(user)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if (typeof data !== 'object') data = {}
 | 
					 | 
				
			||||||
    for (const key in settings) {
 | 
					 | 
				
			||||||
      if (data[key] !== settings[key]) {
 | 
					 | 
				
			||||||
        data[key] = settings[key]
 | 
					 | 
				
			||||||
      } else return
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    return data.updateOne(settings)
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Delete user settings
 | 
					 | 
				
			||||||
  client.deleteUser = async (user) => {
 | 
					 | 
				
			||||||
    const data = await client.findOrCreateUser(user)
 | 
					 | 
				
			||||||
    if (data) {
 | 
					 | 
				
			||||||
      data.deleteOne({ userID: user.id })
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Loads commands
 | 
					 | 
				
			||||||
  client.loadCommand = (commandName) => {
 | 
					 | 
				
			||||||
    try {
 | 
					 | 
				
			||||||
      const props = require(`../commands/${commandName}`)
 | 
					 | 
				
			||||||
      if (props.init) {
 | 
					 | 
				
			||||||
        props.init(client)
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
      client.commands.set(props.help.name, props)
 | 
					 | 
				
			||||||
      // So commands can each have their own cooldown time
 | 
					 | 
				
			||||||
      client.cooldown.set(props.help.name, new Map())
 | 
					 | 
				
			||||||
      props.conf.aliases.forEach(alias => {
 | 
					 | 
				
			||||||
        client.aliases.set(alias, props.help.name)
 | 
					 | 
				
			||||||
      })
 | 
					 | 
				
			||||||
      return false
 | 
					 | 
				
			||||||
    } catch (e) {
 | 
					 | 
				
			||||||
      return `Failed to load ${commandName}: ${e}`
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Command unloader
 | 
					 | 
				
			||||||
  client.unloadCommand = async (commandName) => {
 | 
					 | 
				
			||||||
    let command
 | 
					 | 
				
			||||||
    if (client.commands.has(commandName)) {
 | 
					 | 
				
			||||||
      command = client.commands.get(commandName)
 | 
					 | 
				
			||||||
    } else if (client.aliases.has(commandName)) {
 | 
					 | 
				
			||||||
      command = client.commands.get(client.aliases.get(commandName))
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    if (!command) return `The command \`${commandName}\` doesn't seem to exist, nor is it an alias. Try again!`
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if (command.shutdown) {
 | 
					 | 
				
			||||||
      await command.shutdown(client)
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    const mod = require.cache[require.resolve(`../commands/${command.help.name}`)]
 | 
					 | 
				
			||||||
    delete require.cache[require.resolve(`../commands/${command.help.name}.js`)]
 | 
					 | 
				
			||||||
    for (let i = 0; i < mod.parent.children.length; i++) {
 | 
					 | 
				
			||||||
      if (mod.parent.children[i] === mod) {
 | 
					 | 
				
			||||||
        mod.parent.children.splice(i, 1)
 | 
					 | 
				
			||||||
        break
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    return false
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Creates an embed for when commands are used incorrectly
 | 
					  // Creates an embed for when commands are used incorrectly
 | 
				
			||||||
  client.userError = (msg, cmd, err) => {
 | 
					  client.userError = (msg, cmd, err) => {
 | 
				
			||||||
    const embed = new MessageEmbed()
 | 
					    const embed = new MessageEmbed()
 | 
				
			||||||
| 
						 | 
					@ -146,6 +20,15 @@ module.exports = client => {
 | 
				
			||||||
    })
 | 
					    })
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Embed colour function
 | 
				
			||||||
 | 
					  client.embedColour = function (guild) {
 | 
				
			||||||
 | 
					    if (!guild || guild.member(client.user).displayHexColor === '#000000') {
 | 
				
			||||||
 | 
					      return ['#ff9d68', '#ff97cb', '#d789ff', '#74FFFF'].random()
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					      return guild.member(client.user).displayHexColor
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // Clean up input to remove @everyone, token, etc
 | 
					  // Clean up input to remove @everyone, token, etc
 | 
				
			||||||
  client.clean = async (client, text) => {
 | 
					  client.clean = async (client, text) => {
 | 
				
			||||||
    if (text && text.constructor.name === 'Promise') {
 | 
					    if (text && text.constructor.name === 'Promise') {
 | 
				
			||||||
| 
						 | 
					@ -178,15 +61,6 @@ module.exports = client => {
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // Embed colour function
 | 
					 | 
				
			||||||
  client.embedColour = function (guild) {
 | 
					 | 
				
			||||||
    if (!guild || guild.member(client.user).displayHexColor === '#000000') {
 | 
					 | 
				
			||||||
      return ['#ff9d68', '#ff97cb', '#d789ff', '#74FFFF'].random()
 | 
					 | 
				
			||||||
    } else {
 | 
					 | 
				
			||||||
      return guild.member(client.user).displayHexColor
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  // Capitalises the first letter of every word in a string
 | 
					  // Capitalises the first letter of every word in a string
 | 
				
			||||||
  // eslint-disable-next-line no-extend-native
 | 
					  // eslint-disable-next-line no-extend-native
 | 
				
			||||||
  Object.defineProperty(String.prototype, 'toProperCase', {
 | 
					  Object.defineProperty(String.prototype, 'toProperCase', {
 | 
				
			||||||
| 
						 | 
					@ -273,6 +147,134 @@ module.exports = client => {
 | 
				
			||||||
    return role
 | 
					    return role
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Loads commands
 | 
				
			||||||
 | 
					  client.loadCommand = (commandName) => {
 | 
				
			||||||
 | 
					    try {
 | 
				
			||||||
 | 
					      const props = require(`../commands/${commandName}`)
 | 
				
			||||||
 | 
					      if (props.init) {
 | 
				
			||||||
 | 
					        props.init(client)
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      client.commands.set(props.help.name, props)
 | 
				
			||||||
 | 
					      // So commands can each have their own cooldown time
 | 
				
			||||||
 | 
					      client.cooldown.set(props.help.name, new Map())
 | 
				
			||||||
 | 
					      props.conf.aliases.forEach(alias => {
 | 
				
			||||||
 | 
					        client.aliases.set(alias, props.help.name)
 | 
				
			||||||
 | 
					      })
 | 
				
			||||||
 | 
					      return false
 | 
				
			||||||
 | 
					    } catch (e) {
 | 
				
			||||||
 | 
					      return `Failed to load ${commandName}: ${e}`
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Permission level function
 | 
				
			||||||
 | 
					  client.permlevel = (message, settings) => {
 | 
				
			||||||
 | 
					    let permlvl = 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const permOrder = client.config.permLevels.slice(0).sort((p, c) => p.level < c.level ? 1 : -1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    while (permOrder.length) {
 | 
				
			||||||
 | 
					      const currentLevel = permOrder.shift()
 | 
				
			||||||
 | 
					      if (message.guild && currentLevel.guildOnly) continue
 | 
				
			||||||
 | 
					      if (currentLevel.check(message, settings)) {
 | 
				
			||||||
 | 
					        permlvl = currentLevel.level
 | 
				
			||||||
 | 
					        break
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return permlvl
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Get guild settings
 | 
				
			||||||
 | 
					  client.findOrCreateGuild = async (guild) => {
 | 
				
			||||||
 | 
					    const data = await Guild.findOne({ guildID: guild.id })
 | 
				
			||||||
 | 
					    if (data) {
 | 
				
			||||||
 | 
					      return data
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					      const merged = Object.assign({ _id: mongoose.Types.ObjectId() }, { guildID: guild.id })
 | 
				
			||||||
 | 
					      const newGuild = await new Guild(merged)
 | 
				
			||||||
 | 
					      return newGuild.save()
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Update guild settings
 | 
				
			||||||
 | 
					  client.updateGuild = async (guild, settings) => {
 | 
				
			||||||
 | 
					    let data = await client.findOrCreateGuild(guild)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (typeof data !== 'object') data = {}
 | 
				
			||||||
 | 
					    for (const key in settings) {
 | 
				
			||||||
 | 
					      if (data[key] !== settings[key]) {
 | 
				
			||||||
 | 
					        data[key] = settings[key]
 | 
				
			||||||
 | 
					      } else return
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return data.updateOne(settings)
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Delete guild settings
 | 
				
			||||||
 | 
					  client.deleteGuild = async (guild) => {
 | 
				
			||||||
 | 
					    const data = await client.findOrCreateGuild(guild)
 | 
				
			||||||
 | 
					    if (data) {
 | 
				
			||||||
 | 
					      data.deleteOne({ guildID: guild.id })
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Get user settings
 | 
				
			||||||
 | 
					  client.findOrCreateUser = async (user) => {
 | 
				
			||||||
 | 
					    const data = await User.findOne({ userID: user.id })
 | 
				
			||||||
 | 
					    if (data) {
 | 
				
			||||||
 | 
					      return data
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					      const merged = Object.assign({ _id: mongoose.Types.ObjectId() }, { userID: user.id })
 | 
				
			||||||
 | 
					      const newUser = await new User(merged)
 | 
				
			||||||
 | 
					      return newUser.save()
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Update user settings
 | 
				
			||||||
 | 
					  client.updateUser = async (user, settings) => {
 | 
				
			||||||
 | 
					    let data = await client.findOrCreateUser(user)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (typeof data !== 'object') data = {}
 | 
				
			||||||
 | 
					    for (const key in settings) {
 | 
				
			||||||
 | 
					      if (data[key] !== settings[key]) {
 | 
				
			||||||
 | 
					        data[key] = settings[key]
 | 
				
			||||||
 | 
					      } else return
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return data.updateOne(settings)
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Delete user settings
 | 
				
			||||||
 | 
					  client.deleteUser = async (user) => {
 | 
				
			||||||
 | 
					    const data = await client.findOrCreateUser(user)
 | 
				
			||||||
 | 
					    if (data) {
 | 
				
			||||||
 | 
					      data.deleteOne({ userID: user.id })
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Command unloader
 | 
				
			||||||
 | 
					  client.unloadCommand = async (commandName) => {
 | 
				
			||||||
 | 
					    let command
 | 
				
			||||||
 | 
					    if (client.commands.has(commandName)) {
 | 
				
			||||||
 | 
					      command = client.commands.get(commandName)
 | 
				
			||||||
 | 
					    } else if (client.aliases.has(commandName)) {
 | 
				
			||||||
 | 
					      command = client.commands.get(client.aliases.get(commandName))
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    if (!command) return `The command \`${commandName}\` doesn't seem to exist, nor is it an alias. Try again!`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (command.shutdown) {
 | 
				
			||||||
 | 
					      await command.shutdown(client)
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    const mod = require.cache[require.resolve(`../commands/${command.help.name}`)]
 | 
				
			||||||
 | 
					    delete require.cache[require.resolve(`../commands/${command.help.name}.js`)]
 | 
				
			||||||
 | 
					    for (let i = 0; i < mod.parent.children.length; i++) {
 | 
				
			||||||
 | 
					      if (mod.parent.children[i] === mod) {
 | 
				
			||||||
 | 
					        mod.parent.children.splice(i, 1)
 | 
				
			||||||
 | 
					        break
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return false
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // Both of these functions catch errors and log them (maybe we could use sentry?)
 | 
					  // Both of these functions catch errors and log them (maybe we could use sentry?)
 | 
				
			||||||
  process.on('uncaughtException', (err) => {
 | 
					  process.on('uncaughtException', (err) => {
 | 
				
			||||||
    const errorMsg = err.stack.replace(new RegExp(`${__dirname}/`, 'g'), './')
 | 
					    const errorMsg = err.stack.replace(new RegExp(`${__dirname}/`, 'g'), './')
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue