From 3033b791f576f0137f3feca25305abf8441c5be8 Mon Sep 17 00:00:00 2001 From: Keanu Date: Wed, 1 Jul 2020 14:26:58 +0200 Subject: [PATCH] Added userinfo and botinfo command. --- src/Commands/Utilities/Botinfo.js | 48 ++++++++++++++++++++++ src/Commands/Utilities/Serverinfo.js | 2 +- src/Commands/Utilities/Userinfo.js | 59 ++++++++++++++++++++++++++++ src/Structures/Util.js | 24 ++++++----- 4 files changed, 122 insertions(+), 11 deletions(-) create mode 100644 src/Commands/Utilities/Botinfo.js create mode 100644 src/Commands/Utilities/Userinfo.js diff --git a/src/Commands/Utilities/Botinfo.js b/src/Commands/Utilities/Botinfo.js new file mode 100644 index 0000000..22cb43b --- /dev/null +++ b/src/Commands/Utilities/Botinfo.js @@ -0,0 +1,48 @@ +const Command = require('../../Structures/Command'); +const { MessageEmbed, version: djsversion } = require('discord.js'); +const { version } = require('../../../package.json'); +const { utc } = require('moment'); +const os = require('os'); +const ms = require('ms'); + +module.exports = class extends Command { + + constructor(...args) { + super(...args, { + aliases: ['info', 'bot', 'botinfo'] + }); + } + + run(message) { + const core = os.cpus()[0]; + const embed = new MessageEmbed() + .setThumbnail(this.client.user.displayAvatarURL()) + .setColor(message.guild.me.displayHexColor || 'BLUE') + .addField('General', [ + `**❯ Client:** ${this.client.user.tag} (${this.client.user.id})`, + `**❯ Commands:** ${this.client.commands.size}`, + `**❯ Servers:** ${this.client.guilds.cache.size.toLocaleString()}`, + `**❯ Users:** ${this.client.guilds.cache.reduce((a, b) => a + b.memberCount, 0).toLocaleString()}`, + `**❯ Channels:** ${this.client.channels.cache.size.toLocaleString()}`, + `**❯ Creation Date:** ${utc(this.client.user.createdTimestamp).format('Do MMMM YYYY HH:mm:ss')}`, + `**❯ Node.JS:** ${process.version}`, + `**❯ Version:** v${version}`, + `**❯ Discord.JS:** ${djsversion}`, + '\u200b' + ]) + .addField('System', [ + `**❯ Platform:** ${process.platform}`, + `**❯ Uptime:** ${ms(os.uptime() * 1000, { long: true })}`, + `**❯ CPU:**`, + `\u3000 • Cores: ${os.cpus().length}`, + `\u3000 • Model: ${core.model}`, + `\u3000 • Speed: ${core.speed}MHz`, + `**❯ Memory:**`, + `\u3000 • Total: ${this.client.utils.formatBytes(process.memoryUsage().heapTotal)}`, + `\u3000 • Used: ${this.client.utils.formatBytes(process.memoryUsage().heapTotal)}` + ]) + .setTimestamp(); + message.channel.send(embed); + } + +}; diff --git a/src/Commands/Utilities/Serverinfo.js b/src/Commands/Utilities/Serverinfo.js index 1b566db..6b580bc 100644 --- a/src/Commands/Utilities/Serverinfo.js +++ b/src/Commands/Utilities/Serverinfo.js @@ -81,7 +81,7 @@ module.exports = class extends Command { `**❯ Offline:** ${members.filter(member => member.presence.status === 'offline').size}`, '\u200b' ]) - .addField(`Roles [${roles.length - 1}]`, roles.length < 10 ? roles.join(', ') : roles.length > 10 ? this.client.utils.trimArray(roles) : None) + .addField(`Roles [${roles.length - 1}]`, roles.length < 10 ? roles.join(', ') : roles.length > 10 ? this.client.utils.trimArray(roles) : 'None') .setTimestamp(); message.channel.send(embed); } diff --git a/src/Commands/Utilities/Userinfo.js b/src/Commands/Utilities/Userinfo.js new file mode 100644 index 0000000..ad11fc6 --- /dev/null +++ b/src/Commands/Utilities/Userinfo.js @@ -0,0 +1,59 @@ +const Command = require('../../Structures/Command'); +const { MessageEmbed } = require('discord.js'); +const moment = require('moment'); + +const flags = { + DISCORD_EMPLOYEE: 'Discord Employee', + DISCORD_PARTNER: 'Discord Partner', + BUGHUNTER_LEVEL_1: 'Bug Hunter (Level 1)', + BUGHUNTER_LEVEL_2: 'Bug Hunter (Level 2)', + HYPESQUAD_EVENTS: 'HypeSquad Events', + HOUSE_BRAVERY: 'House of Bravery', + HOUSE_BRILLIANCE: 'House of Brilliance', + HOUSE_BALANCE: 'House of Balance', + EARLY_SUPPORTER: 'Early Supporter', + TEAM_USER: 'Team User', + SYSTEM: 'System', + VERIFIED_BOT: 'Verified Bot', + VERIFIED_DEVELOPER: 'Verified Bot Developer' +}; + +module.exports = class extends Command { + + constructor(...args) { + super(...args, { + aliases: ['user', 'ui'] + }); + } + + async run(message, [target]) { + const member = message.mentions.members.last() || message.guild.members.cache.get(target) || message.member; + const roles = member.roles.cache + .sort((a, b) => b.position - a.position) + .map(role => role.toString()) + .slice(0, -1); + const userFlags = member.user.flags.toArray(); + + const embed = new MessageEmbed() + .setThumbnail(member.user.displayAvatarURL({ dynamic: true, size: 512 })) + .setColor(member.displayHexColor || 'BLUE') + .addField('User', [ + `**❯ Username:** ${member.user.username}`, + `**❯ Discriminator:** ${member.user.discriminator}`, + `**❯ ID:** ${member.id}`, + `**❯ Flags:** ${userFlags.length ? userFlags.map(flag => flags[flag]).join(', ') : 'None'}`, + `**❯ Avatar:** [Link to avatar](${member.user.displayAvatarURL({ dynamic: true })})`, + `**❯ Time Created:** ${moment(member.user.createdTimestamp).format('LT')} ${moment(member.user.createdTimestamp).format('LL')} ${moment(member.user.createdTimestamp).fromNow()}`, + `**❯ Status:** ${member.user.presence.status}`, + `**❯ Game:** ${member.user.presence.game || 'Not playing a game.'}` + ]) + .addField('Member', [ + `**❯ Highest Role:** ${member.roles.highest.id === message.guild.id ? 'None' : member.roles.highest.name}`, + `**❯ Server Join Date:** ${moment(member.joinedAt).format('LL LTS')}`, + `**❯ Hoist Role:** ${member.roles.hoist ? member.roles.hoist.name : 'None'}`, + `**❯ Roles:** [${roles.length}]: ${roles.length < 10 ? roles.join(', ') : roles.length > 10 ? this.client.utils.trimArray(roles) : 'None'}`, + ]); + return message.channel.send(embed); + } + +}; diff --git a/src/Structures/Util.js b/src/Structures/Util.js index d3eb4d2..78b8b21 100644 --- a/src/Structures/Util.js +++ b/src/Structures/Util.js @@ -19,6 +19,20 @@ module.exports = class Util { return `${path.dirname(require.main.filename)}${path.sep}`; } + trimArray(arr, maxLen = 10) { + if (arr.length > maxLen) { + const len = arr.length - maxLen; + arr = arr.slice(0, maxLen); + arr.push(`${len} more...`); + } + return arr; + } + formatBytes(bytes) { + if (bytes === 0) return '0 Bytes'; + const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']; + const i = Math.floor(Math.log(bytes) / Math.log(1024)); + return `${parseFloat((bytes / Math.pow(1024, i)).toFixed(2))} ${sizes[i]}`; + } async loadCommands() { return glob(`${this.directory}commands/**/*.js`).then(commands => { for (const commandFile of commands) { @@ -37,14 +51,4 @@ module.exports = class Util { } }); } - - trimArray(arr, maxLen = 10) { - if (arr.length > maxLen) { - const len = arr.length - maxLen; - arr = arr.slice(0, maxLen); - arr.push(`${len} more...`); - } - return arr; - } - };