Reformatted stuff, added data to imports

This commit is contained in:
Emily 2020-04-06 15:54:45 +10:00
parent 95d84cfaef
commit b2531d49b0
10 changed files with 184 additions and 60 deletions

View file

@ -15,7 +15,7 @@ exports.help = {
usage: 'eval [code]' usage: 'eval [code]'
} }
exports.run = async (client, message, args, level, settings) => { exports.run = async (client, message, args, level, data) => {
const hastebin = require('hastebin-gen') const hastebin = require('hastebin-gen')
const code = args.join(' ') const code = args.join(' ')
try { try {

21
commands/help.js Normal file
View file

@ -0,0 +1,21 @@
exports.conf = {
enabled: true,
guildOnly: false,
aliases: ['commands', 'cmds', 'h'],
permLevel: 'User',
requiredPerms: ['EMBED_LINKS'],
cooldown: 2000
}
exports.help = {
name: 'help',
category: 'General',
description: 'Returns your permission level.',
usage: 'help <command>'
}
const Discord = require('discord.js')
exports.run = (client, message, args, level, data) => {
const embed = new Discord.MessageEmbed()
embed.setColor(client.embedColour(message.guild))
}

View file

@ -14,7 +14,7 @@ exports.help = {
usage: 'level' usage: 'level'
} }
exports.run = async (client, message, args, level, settings) => { exports.run = async (client, message, args, level, data) => {
try { try {
const friendly = client.config.permLevels.find(l => l.level === level).name const friendly = client.config.permLevels.find(l => l.level === level).name
message.reply(`your permission level is ${level} (${friendly}).`) message.reply(`your permission level is ${level} (${friendly}).`)

View file

@ -14,7 +14,7 @@ exports.help = {
usage: 'ping' usage: 'ping'
} }
exports.run = async (client, message, args, level, settings) => { exports.run = async (client, message, args, level, data) => {
const msg = await message.channel.send('Pinging...') const msg = await message.channel.send('Pinging...')
msg.edit( msg.edit(
`Pong! \`${msg.createdTimestamp - message.createdTimestamp}ms\` (💗 \`${Math.round(client.ws.ping)}ms\`)` `Pong! \`${msg.createdTimestamp - message.createdTimestamp}ms\` (💗 \`${Math.round(client.ws.ping)}ms\`)`

View file

@ -1,33 +1,31 @@
module.exports = async (client, message) => { module.exports = async (client, message) => {
if (message.author.bot) return if (message.author.bot) return
try { const data = {}
await client.getGuild(message.guild)
} catch (err) { data.userData = await client.findOrCreateUser(message.author)
try {
const newGuild = { if (message.guild) {
guildID: message.guild.id if (!message.channel.permissionsFor(client.user).has('SEND_MESSAGES')) {
} try {
await client.createGuild(newGuild) return message.author.send(`I don't have permission to speak in **#${message.channel.name}**, Please ask a moderator to give me the send messages permission!`)
} catch (err) { } catch (err) {}
client.logger.error('Failed to create DB entry for existing guild: ' + err)
} }
data.guildData = await client.findOrCreateGuild(message.guild)
} }
const settings = await client.getGuild(message.guild) const prefixes = [data.userData.prefix, data.guildData.prefix]
let prefix = settings.prefix let prefix
const myMention = `<@&${client.user.id}>` const prefixMention = new RegExp(`^<@!?${client.user.id}> `)
const myMention2 = `<@!${client.user.id}>` if (message.content.match(prefixMention) ? message.content.match(prefixMention)[0] : '!') {
prefix = message.content.match(prefixMention) ? message.content.match(prefixMention)[0] : '!'
}
if (message.content.startsWith(myMention) || message.content.startsWith(myMention2)) { for (const thisPrefix of prefixes) {
if (message.content.length > myMention.length + 1 && (message.content.substr(0, myMention.length + 1) === myMention + ' ' || message.content.substr(0, myMention2.length + 1) === myMention2 + ' ')) { if (message.content.startsWith(thisPrefix)) prefix = thisPrefix
prefix = message.content.substr(0, myMention.length) + ' ' }
} else {
return message.channel.send(`Current prefix: \`${prefix}\``)
};
};
if (message.content.indexOf(prefix) !== 0) return if (message.content.indexOf(prefix) !== 0) return
@ -36,19 +34,35 @@ module.exports = async (client, message) => {
if (message.guild && !message.member) await message.guild.fetchMember(message.author) if (message.guild && !message.member) await message.guild.fetchMember(message.author)
const level = client.permlevel(message, settings) const level = client.permlevel(message, data.guildSettings)
const cmd = client.commands.get(command) || client.commands.get(client.aliases.get(command)) const cmd = client.commands.get(command) || client.commands.get(client.aliases.get(command))
if (!cmd) return if (!cmd) return
if (!cmd.conf.enabled) {
if (data.guildData.systemNotice.enabled === true) {
return message.channel.send('This command has been disabled by my developers.')
} else {
return
}
}
if (cmd && !message.guild && cmd.conf.guildOnly) { if (cmd && !message.guild && cmd.conf.guildOnly) {
return message.channel.send('This command is unavailable via private message. Please run this command in a guild.') return message.channel.send('This command is unavailable via private message. Please run this command in a guild.')
} }
if (message.guild) {
var missing = cmd.conf.requiredPerms.filter(p => !message.channel.permissionsFor(client.user).has(p))
if (missing.length > 0) {
missing = '`' + (missing.join('`, `')) + '`'
return message.channel.send(`Missing permissions: ${missing}`)
}
}
// Dev perm level is separate so dev's don't get owner perms where they shouldn't have them // Dev perm level is separate so dev's don't get owner perms where they shouldn't have them
if (cmd.conf.permLevel === 'Developer') { if (cmd.conf.permLevel === 'Developer') {
if (!client.config.devs.includes(message.author.id)) { if (!client.config.devs.includes(message.author.id)) {
if (settings.systemNotice === true) { if (data.guildData.systemNotice.enabled === true) {
return message.channel.send('You don\'t have permission to run this command!') return message.channel.send('You don\'t have permission to run this command!')
} else { } else {
return return
@ -57,7 +71,7 @@ module.exports = async (client, message) => {
} }
if (level < client.levelCache[cmd.conf.permLevel]) { if (level < client.levelCache[cmd.conf.permLevel]) {
if (settings.systemNotice === true) { if (data.guildData.systemNotice.enabled === true) {
return message.channel.send('You don\'t have permission to run this command!') return message.channel.send('You don\'t have permission to run this command!')
} else { } else {
return return
@ -88,5 +102,5 @@ module.exports = async (client, message) => {
} }
client.logger.log(`Command ran: ${cmd.help.name}`) client.logger.log(`Command ran: ${cmd.help.name}`)
cmd.run(client, message, args, level, settings) cmd.run(client, message, args, level, data)
} }

View file

@ -2,12 +2,12 @@ module.exports = (client) => {
const activities = client.commands.keyArray() const activities = client.commands.keyArray()
let activity = activities.random() let activity = activities.random()
client.user.setActivity(`${client.config.defaultGuildSettings.prefix + activity} | v${client.version.number}`, { type: 'PLAYING' }) client.user.setActivity(`${client.config.defaultPrefix + activity} | v${client.version.number}`, { type: 'PLAYING' })
setInterval(() => { setInterval(() => {
activity = activities.random() activity = activities.random()
if (client.lockActivity === false) { if (client.lockActivity === false) {
client.user.setActivity(`${client.config.defaultGuildSettings.prefix + activity} | v${client.version.number}`, { type: 'PLAYING' }) client.user.setActivity(`${client.config.defaultPrefix + activity} | v${client.version.number}`, { type: 'PLAYING' })
}; };
}, 30000) }, 30000)

View file

@ -8,12 +8,20 @@ if (Number(process.version.slice(1).split('.')[0]) < 12) {
} }
// Libraries // Libraries
const Discord = require('discord.js')
const client = new Discord.Client({ disabledEvents: ['TYPING_START'] })
const fs = require('fs') const fs = require('fs')
const colors = require('colors') const colors = require('colors')
const isDocker = require('is-docker') const isDocker = require('is-docker')
const Discord = require('discord.js')
const client = new Discord.Client({ disabledEvents: ['TYPING_START'] })
// Helpers
client.config = require('./config')
client.version = require('./version.json')
client.db = require('./helpers/mongoose')
require('./helpers/_functions')(client)
require('./helpers/music')(client)
// Initialise logger
client.logger = require('tracer').colorConsole({ client.logger = require('tracer').colorConsole({
transport: function (data) { transport: function (data) {
console.log(data.output) console.log(data.output)
@ -39,24 +47,13 @@ client.logger = require('tracer').colorConsole({
filters: [colors.white] filters: [colors.white]
}) })
// Check to make sure config exists // Create caches for permissions, commands, cooldowns and aliases
if (fs.existsSync('./config.js') === false) {
client.logger.fatal('The config.js file is missing! Please create a config.js file.')
process.exit()
}
client.levelCache = {} client.levelCache = {}
client.commands = new Discord.Collection() client.commands = new Discord.Collection()
client.cooldown = new Discord.Collection() client.cooldown = new Discord.Collection()
client.aliases = new Discord.Collection() client.aliases = new Discord.Collection()
client.config = require('./config') // Main initialisation function
client.version = require('./version.json')
client.db = require('./util/mongoose')
require('./util/functions')(client)
require('./util/music')(client)
// Initialization function
const init = async () => { const init = async () => {
// Command handler // Command handler
fs.readdir('./commands', (err, files) => { fs.readdir('./commands', (err, files) => {
@ -98,6 +95,7 @@ const init = async () => {
client.levelCache[thisLevel.name] = thisLevel.level client.levelCache[thisLevel.name] = thisLevel.level
} }
// Check if Woomy is running inside a Docker container
if (isDocker() === true) { if (isDocker() === true) {
client.devmode = true client.devmode = true
client.logger.warn('Running in development mode.') client.logger.warn('Running in development mode.')

View file

@ -1,35 +1,90 @@
const mongoose = require('mongoose') const { Schema, model } = require('mongoose')
const Schema = mongoose.Schema const { defaultPrefix } = require('../config')
const { defaultGuildSettings: defaults } = require('../config')
module.exports = mongoose.model('Guild', new Schema({ module.exports = model('Guild', new Schema({
_id: mongoose.Schema.Types.ObjectId, _id: Schema.Types.ObjectId,
guildID: String, guildID: String,
guildName: String,
prefix: { prefix: {
type: String, type: String,
default: defaults.prefix default: defaultPrefix
},
systemNotice: {
type: Boolean,
default: defaults.systemNotice
}, },
modRole: { modRole: {
type: String, type: String,
default: defaults.modRole default: null
}, },
adminRole: { adminRole: {
type: String, type: String,
default: defaults.adminRole default: null
}, },
mutedRole: { mutedRole: {
type: String, type: String,
default: defaults.mutedRole default: null
},
autoRole: {
type: String,
default: null
},
systemNotice: {
type: Object,
default: {
enabled: true,
autoDelete: 0
}
},
plugins: {
type: Object,
default: {
welcome: {
enabled: false,
channel: null,
message: null
},
goodbye: {
enabled: false,
channel: null,
message: null
},
chatLogs: {
enabled: false,
channel: null
},
modLogs: {
enabled: false,
channel: null
}
}
},
botChannels: {
type: Array,
default: []
},
blacklisted: {
type: Array,
default: []
},
customCommands: {
type: Array,
default: []
},
disabledCommands: {
type: Array,
default: []
},
disabledCategories: {
type: Array,
default: []
} }
})) }))

View file

@ -0,0 +1,8 @@
const { Schema, model } = require('mongoose')
module.exports = model('Member', new Schema({
_id: Schema.Types.ObjectId,
userID: String
// Will chuck in some stuff like timed mutes, warning system, levelling, etc
}))

View file

@ -0,0 +1,28 @@
const { Schema, model } = require('mongoose')
const { defaultPrefix } = require('../config')
module.exports = model('User', new Schema({
_id: Schema.Types.ObjectId,
userID: String,
prefix: {
type: String,
default: defaultPrefix
},
profile: {
type: Object,
default: {
bio: 'I should run ~setbio :P',
birthdate: null,
pronouns: null,
favColour: null
}
},
// polyamory uwu
marriages: {
type: Array,
default: []
}
}))