ext-manager
Version:
A package to manage an extensions for event listeners or discord bot commands with ease
56 lines (49 loc) • 1.97 kB
JavaScript
const { MessageEmbed } = require('discord.js')
function isOwner (owner, userID, addition = []) {
const conditions = [addition.some(id => id === userID)]
if (owner.members) {
conditions.push(owner.members.some(us => userID === us.id))
} else {
conditions.push(owner.id === userID)
}
return conditions.some(condition => condition)
}
function hasPerms (message, perm, member) {
let permission
if (perm.type.toLowerCase() === 'channel') {
permission = message.channel.permissionsFor(member)
} else {
permission = member.permissions
}
if (perm.optional) {
return permission.any(perm.perms)
} else {
return permission.has(perm.perms)
}
}
async function checkArgs (message, args, arg) {
if (args[arg.position]) return true
if (typeof arg.response === 'string' || arg.response instanceof MessageEmbed) message.channel.send(arg.response).catch(err => console.error(err))
if (!(arg.prompt instanceof Object)) return
try {
const timeout = arg.prompt.timeout > 0 ? arg.prompt.timeout : 30
const filter = mess => mess.author.id === message.author.id
const msg = await message.channel.awaitMessages(filter, { max: 1, time: timeout * 1000, errors: ['timed out'] })
const res = msg.first().content
if (res === 'cancel') {
if (typeof arg.prompt.cancelled === 'string' || arg.prompt.cancelled instanceof MessageEmbed) message.channel.send(arg.prompt.cancelled)
return false
}
args.push(...res.split(' '))
if (args[arg.position]) return true
if (typeof arg.prompt.failed === 'string' || arg.prompt.failed instanceof MessageEmbed) message.channel.send(arg.prompt.failed)
return false
} catch {
if (typeof arg.prompt.timedOut === 'string' || arg.prompt.timedOut instanceof MessageEmbed) message.channel.send(arg.prompt.timedOut)
return false
}
}
module.exports = {
isOwner, hasPerms, checkArgs
}