From 48097b729d78539e7fa8aa200e71fcfd81d15cc1 Mon Sep 17 00:00:00 2001 From: Keanu Date: Wed, 5 Aug 2020 22:08:26 +0200 Subject: [PATCH] Added WIP info command. --- src/commands/info.ts | 122 +++++++++++++++++++++++++++++++++++++++++++ src/defs/info.ts | 45 ++++++++++++++++ 2 files changed, 167 insertions(+) create mode 100644 src/commands/info.ts create mode 100644 src/defs/info.ts diff --git a/src/commands/info.ts b/src/commands/info.ts new file mode 100644 index 0000000..e05a439 --- /dev/null +++ b/src/commands/info.ts @@ -0,0 +1,122 @@ +import { Guild, MessageEmbed } from "discord.js"; +import moment from "moment"; +import Command from "../core/command"; +import {CommonLibrary} from "../core/lib"; +import { verificationLevels, filterLevels, regions, flags } from "../defs/info"; + +export default new Command({ + description: "Command to provide all sorts of info about the current server, a user, etc.", + async run($: CommonLibrary): Promise + { + $.channel.send("Please provide an argument. `.help info`") + console.log(verificationLevels); + }, + subcommands: + { + avatar: new Command({ + description: "Shows your own, or another user's avatar.", + usage: "()", + async run($: CommonLibrary): Promise + { + $.channel.send($.author.displayAvatarURL({ dynamic: true, size: 2048 })) + }, + user: new Command({ + description: "Shows your own, or another user's avatar.", + async run($: CommonLibrary): Promise + { + $.channel.send($.args[0].displayAvatarURL({ dynamic: true, size: 2048 })) + } + }), + }), + + guild: new Command({ + description: "Displays info about the current guild.", + async run($: CommonLibrary): Promise + { + if ($.guild) { + const roles = $.guild.roles.cache.sort((a, b) => b.position - a.position).map(role => role.toString()); + const members = $.guild.members.cache; + const channels = $.guild.channels.cache; + const emojis = $.guild.emojis.cache; + + const iconURL = $.guild.iconURL({ dynamic: true }) + const embed = new MessageEmbed() + .setDescription(`**Guild information for __${$.guild.name}__**`) + .setColor('BLUE') + if (iconURL) embed.setThumbnail(iconURL) + .addField('General', [ + `**❯ Name:** ${$.guild.name}`, + `**❯ ID:** ${$.guild.id}`, + `**❯ Owner:** ${$.guild.owner?.user.tag} (${$.guild.ownerID})`, + `**❯ Region:** ${regions[$.guild.region]}`, + `**❯ Boost Tier:** ${$.guild.premiumTier ? `Tier ${$.guild.premiumTier}` : 'None'}`, + `**❯ Explicit Filter:** ${filterLevels[$.guild.explicitContentFilter]}`, + `**❯ Verification Level:** ${verificationLevels[$.guild.verificationLevel]}`, + `**❯ Time Created:** ${moment($.guild.createdTimestamp).format('LT')} ${moment($.guild.createdTimestamp).format('LL')} ${moment($.guild.createdTimestamp).fromNow()})`, + '\u200b' + ]) + .addField('Statistics', [ + `**❯ Role Count:** ${roles.length}`, + `**❯ Emoji Count:** ${emojis.size}`, + `**❯ Regular Emoji Count:** ${emojis.filter(emoji => !emoji.animated).size}`, + `**❯ Animated Emoji Count:** ${emojis.filter(emoji => emoji.animated).size}`, + `**❯ Member Count:** ${$.guild.memberCount}`, + `**❯ Humans:** ${members.filter(member => !member.user.bot).size}`, + `**❯ Bots:** ${members.filter(member => member.user.bot).size}`, + `**❯ Text Channels:** ${channels.filter(channel => channel.type === 'text').size}`, + `**❯ Voice Channels:** ${channels.filter(channel => channel.type === 'voice').size}`, + `**❯ Boost Count:** ${$.guild.premiumSubscriptionCount || '0'}`, + `\u200b` + ]) + .addField('Presence', [ + `**❯ Online:** ${members.filter(member => member.presence.status === 'online').size}`, + `**❯ Idle:** ${members.filter(member => member.presence.status === 'idle').size}`, + `**❯ Do Not Disturb:** ${members.filter(member => member.presence.status === 'dnd').size}`, + `**❯ 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') + .setTimestamp(); + + $.channel.send(embed) + + } else { + $.channel.send("Please execute this command in a guild.") + } + } + }) + }, + user: new Command({ + description: "Displays info about mentioned user.", + async run($: CommonLibrary): Promise + { + const member = $.args[0] || $.args[0].mentions.members.last() || $.guild?.members.cache.get($.args[0]) || $.member; + const roles = member.roles.cache + .sort((a: { position: number; }, b: { position: number; }) => b.position - a.position) + .map((role: { toString: () => any; }) => 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: string | number) => 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 === $.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'}`, + ]); + $.channel.send(embed) + } + }) +}); \ No newline at end of file diff --git a/src/defs/info.ts b/src/defs/info.ts new file mode 100644 index 0000000..d560e2c --- /dev/null +++ b/src/defs/info.ts @@ -0,0 +1,45 @@ +// Flags a user can have. +// They're basically your profile badges. +export const flags: {[index: string]:any} = { + 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', +}; + +export const filterLevels: {[index: string]:any} = { + DISABLED: 'Off', + MEMBERS_WITHOUT_ROLES: 'No Role', + ALL_MEMBERS: 'Everyone', +}; +export const verificationLevels: {[index: string]:any} = { + NONE: 'None', + LOW: 'Low', + MEDIUM: 'Medium', + HIGH: '(╯°□°)╯︵ ┻━┻', + VERY_HIGH: '┻━┻ ミヽ(ಠ益ಠ)ノ彡┻━┻', +}; +export const regions: {[index: string]:any} = { + brazil: 'Brazil', + europe: 'Europe', + hongkong: 'Hong Kong', + india: 'India', + japan: 'Japan', + russia: 'Russia', + singapore: 'Singapore', + southafrica: 'South Africa', + sydney: 'Sydney', + 'us-central': 'US Central', + 'us-east': 'US East', + 'us-west': 'US West', + 'us-south': 'US South', +}; \ No newline at end of file