diff --git a/commands/admin.js b/commands/admin.js index 0d1030b..df40e91 100644 --- a/commands/admin.js +++ b/commands/admin.js @@ -1,12 +1,36 @@ const Discord = require('discord.js'); +const UserData = require('../models/user'); module.exports = { name: "admin", help: new Discord.MessageEmbed() .setTitle("Help -> Admin") .setDescription("Make a user a Natsuki admin") - .addField("Syntax", "`admin <@user|userID>`"), + .addField("Syntax", "`admin <@user|userID>`") + .addField("Notice", "This command is only available to Natsuki developers."), async execute(message, msg, args, cmd, prefix, mention, client) { + if (!message.guild) {return message.reply("This is a guild-only command.");} if (!args.length) {return message.channel.send(`Syntax: \`${prefix}\``);} + let person = mention ? mention : args[1] ? client.users.cache.has(args[1]) ? client.users.cache.get(args[1]) : null : null; + let tu = await UserData.findOne({uid: person ? person.id : message.author.id}) ? await UserData.findOne({uid: person ? person.id : message.author.id}) : new UserData({uid: person ? person.id : message.author.id}); + if (['c', 'check'].includes(args[0])) {return message.reply(`${person ? person : message.member.displayName} ${tu.admin ? 'is' : 'is not'} a Natsuki Admin.`);} + if (!['a', 'add', 'r', 'remove'].includes(args[0])) {return message.reply("You must specify whether to `add` or `remove` someone as an admin.");} + if (!person) {return message.reply("You must mention someone to add as an admin, or use their ID.");} + let atu = await UserData.findOne({uid: message.author.id}); + if (!atu && !atu.developer && !client.developers.includes(message.author.id)) {return message.reply('You must be a developer in order to add set admin statuses.');} + if (['a', 'add'].includes(args[0])) {tu.support = true; tu.staff = true; tu.admin = true;} + else {tu.admin = false; tu.developer = false;} + tu.save(); + const logemb = (act) => new Discord.MessageEmbed() + .setAuthor(`Admin ${act}`, message.author.avatarURL()) + .setDescription("A user's Admin status was updated.") + .setThumbnail(person.avatarURL({size: 1024})) + .addField("Name", person.username, true) + .addField("Developer", message.author.username, true) + .setColor("e8da3a") + .setFooter("Natsuki") + .setTimestamp(); + client.guilds.cache.get('762707532417335296').channels.cache.get('762732961753595915').send(logemb(['a', 'add'].includes(args[0]) ? 'Added' : 'Removed')); + return message.reply(`${message.guild.members.cache.get(person.id).displayName} is now an admin!`); } }; \ No newline at end of file diff --git a/commands/developer.js b/commands/developer.js index 5c97540..220a392 100644 --- a/commands/developer.js +++ b/commands/developer.js @@ -20,14 +20,15 @@ module.exports = { if (!person) {return message.reply("You must mention someone to add as a developer, or use their ID.");} let atu = await UserData.findOne({uid: message.author.id}); if (!atu && !atu.developer && !client.developers.includes(message.author.id)) {return message.reply('You must be a developer in order to add or remove someone else as a developer.');} - tu.developer = ['a', 'add'].includes(args[0]); + if (['a', 'add'].includes(args[0])) {tu.support = true; tu.staff = true; tu.admin = true; tu.developer = true;} + else {tu.developer = false;} tu.save(); const logemb = (act) => new Discord.MessageEmbed() .setAuthor(`Developer ${act}`, message.author.avatarURL()) .setDescription("A user's Developer status was updated.") - .setThumbnail(message.guild.iconURL({size: 1024})) + .setThumbnail(person.avatarURL({size: 1024})) .addField("Name", person.username, true) - .addField("Admin", message.author.username, true) + .addField("Developer", message.author.username, true) .setColor("e8da3a") .setFooter("Natsuki") .setTimestamp(); diff --git a/commands/staff.js b/commands/staff.js new file mode 100644 index 0000000..1ba51b5 --- /dev/null +++ b/commands/staff.js @@ -0,0 +1,36 @@ +const Discord = require('discord.js'); +const UserData = require('../models/user'); + +module.exports = { + name: "admin", + help: new Discord.MessageEmbed() + .setTitle("Help -> Staff") + .setDescription("Make a user a Natsuki staff member") + .addField("Syntax", "`admin <@user|userID>`") + .addField("Notice", "This command is only available to Natsuki developers."), + async execute(message, msg, args, cmd, prefix, mention, client) { + if (!message.guild) {return message.reply("This is a guild-only command.");} + if (!args.length) {return message.channel.send(`Syntax: \`${prefix}\``);} + let person = mention ? mention : args[1] ? client.users.cache.has(args[1]) ? client.users.cache.get(args[1]) : null : null; + let tu = await UserData.findOne({uid: person ? person.id : message.author.id}) ? await UserData.findOne({uid: person ? person.id : message.author.id}) : new UserData({uid: person ? person.id : message.author.id}); + if (['c', 'check'].includes(args[0])) {return message.reply(`${person ? person : message.member.displayName} ${tu.admin ? 'is' : 'is not'} a part of Natsuki Staff.`);} + if (!['a', 'add', 'r', 'remove'].includes(args[0])) {return message.reply("You must specify whether to `add` or `remove` someone as a Staff Member.");} + if (!person) {return message.reply("You must mention someone to add as a staff member, or use their ID.");} + let atu = await UserData.findOne({uid: message.author.id}); + if (!atu && !atu.developer && !client.developers.includes(message.author.id)) {return message.reply('You must be a developer in order to add set staff member statuses.');} + if (['a', 'add'].includes(args[0])) {tu.support = true; tu.staff = true;} + else {tu.staff = false; tu.admin = false; tu.developer = false;} + tu.save(); + const logemb = (act) => new Discord.MessageEmbed() + .setAuthor(`Staff ${act}`, message.author.avatarURL()) + .setDescription("A user's Staff status was updated.") + .setThumbnail(person.avatarURL({size: 1024})) + .addField("Name", person.username, true) + .addField("Developer", message.author.username, true) + .setColor("e8da3a") + .setFooter("Natsuki") + .setTimestamp(); + client.guilds.cache.get('762707532417335296').channels.cache.get('762732961753595915').send(logemb(['a', 'add'].includes(args[0]) ? 'Added' : 'Removed')); + return message.reply(`${message.guild.members.cache.get(person.id).displayName} is now a staff member!`); + } +}; \ No newline at end of file diff --git a/commands/support.js b/commands/support.js new file mode 100644 index 0000000..127c3df --- /dev/null +++ b/commands/support.js @@ -0,0 +1,36 @@ +const Discord = require('discord.js'); +const UserData = require('../models/user'); + +module.exports = { + name: "admin", + help: new Discord.MessageEmbed() + .setTitle("Help -> Support") + .setDescription("Make a user a Natsuki Support Team member") + .addField("Syntax", "`admin <@user|userID>`") + .addField("Notice", "This command is only available to Natsuki admin."), + async execute(message, msg, args, cmd, prefix, mention, client) { + if (!message.guild) {return message.reply("This is a guild-only command.");} + if (!args.length) {return message.channel.send(`Syntax: \`${prefix}\``);} + let person = mention ? mention : args[1] ? client.users.cache.has(args[1]) ? client.users.cache.get(args[1]) : null : null; + let tu = await UserData.findOne({uid: person ? person.id : message.author.id}) ? await UserData.findOne({uid: person ? person.id : message.author.id}) : new UserData({uid: person ? person.id : message.author.id}); + if (['c', 'check'].includes(args[0])) {return message.reply(`${person ? person : message.member.displayName} ${tu.admin ? 'is' : 'is not'} a part of Natsuki Support.`);} + if (!['a', 'add', 'r', 'remove'].includes(args[0])) {return message.reply("You must specify whether to `add` or `remove` someone as a Support Team Member.");} + if (!person) {return message.reply("You must mention someone to add as a support member, or use their ID.");} + let atu = await UserData.findOne({uid: message.author.id}); + if (!atu && !atu.admin) {return message.reply('You must be an admin in order to add set support team member statuses.');} + if (['a', 'add'].includes(args[0])) {tu.support = true;} + else {tu.support = false; tu.staff = false; tu.admin = false; tu.developer = false;} + tu.save(); + const logemb = (act) => new Discord.MessageEmbed() + .setAuthor(`Support ${act}`, message.author.avatarURL()) + .setDescription("A user's Support status was updated.") + .setThumbnail(person.avatarURL({size: 1024})) + .addField("Name", person.username, true) + .addField("Developer", message.author.username, true) + .setColor("e8da3a") + .setFooter("Natsuki") + .setTimestamp(); + client.guilds.cache.get('762707532417335296').channels.cache.get('762732961753595915').send(logemb(['a', 'add'].includes(args[0]) ? 'Added' : 'Removed')); + return message.reply(`${message.guild.members.cache.get(person.id).displayName} is now a Support Team member!`); + } +}; \ No newline at end of file diff --git a/events/guildCreate.js b/events/guildCreate.js new file mode 100644 index 0000000..a4173d4 --- /dev/null +++ b/events/guildCreate.js @@ -0,0 +1,28 @@ +const Discord = require('discord.js'); +const BotDataSchema = require('../models/bot'); + +module.exports = async (client, guild) => { + + /* + * Top.gg API + * GBL API never happening + * Other APIs idk + */ + + let botData = await BotDataSchema.findOne({finder: 'lel'}); + botData.servers = client.guilds.cache.size; + botData.servers_all += 1; + botData.save(); + + client.guilds.cache.get('762707532417335296').channels.cache.get('766031709866557471').send(new Discord.MessageEmbed() + .setAuthor('New Guild Added', guild.owner.avatarURL()) + .setTitle(guild.name) + .setThumbnail(guild.iconURL({size: 2048})) + .addField('Owner', guild.owner.tag, true) + .addField('Members', guild.members.cache.size) + .addField('Position', `Server #${client.guilds.cache.size}`) + .setColor('55ff7f') + .setFooter('Natsuki') + .setTimestamp() + ); +}; \ No newline at end of file diff --git a/events/ready.js b/events/ready.js index b9b6d98..d76675e 100644 --- a/events/ready.js +++ b/events/ready.js @@ -63,8 +63,6 @@ module.exports = async client => { lastRestart: new Date(), errors_all: 0, }); - botData.servers = client.guilds.cache.size; - botData.servers_all = botData.servers_all + 1; botData.restarts = botData.restarts + 1; botData.lastRestart = new Date(); diff --git a/handle/event.js b/handle/event.js index aae1d6a..443357b 100644 --- a/handle/event.js +++ b/handle/event.js @@ -10,6 +10,6 @@ module.exports = client => { let evtName = file.split('.')[0]; client.on(evtName, evt.bind(null, client)); console.log(`${chalk.gray('[LOG] ')} >> ${chalk.blueBright('Loaded Event')} ${chalk.white(evtName)}`); - }; + } console.log(`\n${chalk.gray('[BOOT]')} >> ${chalk.blue('Loaded all Events')}`); }; \ No newline at end of file