Fixed up info guild.

This commit is contained in:
Keanu Timmermans 2020-10-22 13:39:33 +00:00 committed by GitHub
parent dbebb656b6
commit cdf2c47f0c
1 changed files with 206 additions and 197 deletions

View File

@ -1,197 +1,206 @@
import { Guild, MessageEmbed } from 'discord.js'; import { Guild, MessageEmbed } from 'discord.js';
import moment from 'moment'; import moment from 'moment';
import Command from '../core/command'; import Command from '../core/command';
import { CommonLibrary } from '../core/lib'; import { CommonLibrary } from '../core/lib';
import { verificationLevels, filterLevels, regions, flags } from '../defs/info'; import { verificationLevels, filterLevels, regions, flags } from '../defs/info';
export default new Command({ function trimArray(arr: any, maxLen = 10) {
description: if (arr.length > maxLen) {
'Command to provide all sorts of info about the current server, a user, etc.', const len = arr.length - maxLen;
run: 'Please provide an argument.\nFor help, run `%prefix%help info`.', arr = arr.slice(0, maxLen);
subcommands: { arr.push(`${len} more...`);
avatar: new Command({ }
description: "Shows your own, or another user's avatar.", return arr;
usage: '(<user>)', }
async run($: CommonLibrary): Promise<any> {
$.channel.send( export default new Command({
$.author.displayAvatarURL({ dynamic: true, size: 2048 }), description:
); 'Command to provide all sorts of info about the current server, a user, etc.',
}, run: 'Please provide an argument.\nFor help, run `%prefix%help info`.',
user: new Command({ subcommands: {
description: "Shows your own, or another user's avatar.", avatar: new Command({
async run($: CommonLibrary): Promise<any> { description: "Shows your own, or another user's avatar.",
$.channel.send( usage: '(<user>)',
$.args[0].displayAvatarURL({ dynamic: true, size: 2048 }), async run($: CommonLibrary): Promise<any> {
); $.channel.send(
}, $.author.displayAvatarURL({ dynamic: true, size: 2048 }),
}), );
}), },
user: new Command({
guild: new Command({ description: "Shows your own, or another user's avatar.",
description: 'Displays info about the current guild.', async run($: CommonLibrary): Promise<any> {
async run($: CommonLibrary): Promise<any> { $.channel.send(
if ($.guild) { $.args[0].displayAvatarURL({ dynamic: true, size: 2048 }),
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; guild: new Command({
description: 'Displays info about the current guild.',
const iconURL = $.guild.iconURL({ dynamic: true }); async run($: CommonLibrary): Promise<any> {
const embed = new MessageEmbed() if ($.guild) {
.setDescription(`**Guild information for __${$.guild.name}__**`) const roles = $.guild.roles.cache
.setColor('BLUE'); .sort((a, b) => b.position - a.position)
if (iconURL) .map((role) => role.toString());
embed const members = $.guild.members.cache;
.setThumbnail(iconURL) const channels = $.guild.channels.cache;
.addField('General', [ const emojis = $.guild.emojis.cache;
`** Name:** ${$.guild.name}`,
`** ID:** ${$.guild.id}`, const iconURL = $.guild.iconURL({ dynamic: true });
`** Owner:** ${$.guild.owner?.user.tag} (${$.guild.ownerID})`, const embed = new MessageEmbed()
`** Region:** ${regions[$.guild.region]}`, .setDescription(`**Guild information for __${$.guild.name}__**`)
`** Boost Tier:** ${ .setColor('BLUE');
$.guild.premiumTier ? `Tier ${$.guild.premiumTier}` : 'None' if (iconURL)
}`, embed
`** Explicit Filter:** ${ .setThumbnail(iconURL)
filterLevels[$.guild.explicitContentFilter] .addField('General', [
}`, `** Name:** ${$.guild.name}`,
`** Verification Level:** ${ `** ID:** ${$.guild.id}`,
verificationLevels[$.guild.verificationLevel] `** Owner:** ${$.guild.owner?.user.tag} (${$.guild.ownerID})`,
}`, `** Region:** ${regions[$.guild.region]}`,
`** Time Created:** ${moment($.guild.createdTimestamp).format( `** Boost Tier:** ${
'LT', $.guild.premiumTier ? `Tier ${$.guild.premiumTier}` : 'None'
)} ${moment($.guild.createdTimestamp).format('LL')} ${moment( }`,
$.guild.createdTimestamp, `** Explicit Filter:** ${
).fromNow()})`, filterLevels[$.guild.explicitContentFilter]
'\u200b', }`,
]) `** Verification Level:** ${
.addField('Statistics', [ verificationLevels[$.guild.verificationLevel]
`** Role Count:** ${roles.length}`, }`,
`** Emoji Count:** ${emojis.size}`, `** Time Created:** ${moment($.guild.createdTimestamp).format(
`** Regular Emoji Count:** ${ 'LT',
emojis.filter((emoji) => !emoji.animated).size )} ${moment($.guild.createdTimestamp).format('LL')} ${moment(
}`, $.guild.createdTimestamp,
`** Animated Emoji Count:** ${ ).fromNow()})`,
emojis.filter((emoji) => emoji.animated).size '\u200b',
}`, ])
`** Member Count:** ${$.guild.memberCount}`, .addField('Statistics', [
`** Humans:** ${ `** Role Count:** ${roles.length}`,
members.filter((member) => !member.user.bot).size `** Emoji Count:** ${emojis.size}`,
}`, `** Regular Emoji Count:** ${
`** Bots:** ${ emojis.filter((emoji) => !emoji.animated).size
members.filter((member) => member.user.bot).size }`,
}`, `** Animated Emoji Count:** ${
`** Text Channels:** ${ emojis.filter((emoji) => emoji.animated).size
channels.filter((channel) => channel.type === 'text').size }`,
}`, `** Member Count:** ${$.guild.memberCount}`,
`** Voice Channels:** ${ `** Humans:** ${
channels.filter((channel) => channel.type === 'voice').size members.filter((member) => !member.user.bot).size
}`, }`,
`** Boost Count:** ${$.guild.premiumSubscriptionCount || '0'}`, `** Bots:** ${
`\u200b`, members.filter((member) => member.user.bot).size
]) }`,
.addField('Presence', [ `** Text Channels:** ${
`** Online:** ${ channels.filter((channel) => channel.type === 'text').size
members.filter( }`,
(member) => member.presence.status === 'online', `** Voice Channels:** ${
).size channels.filter((channel) => channel.type === 'voice').size
}`, }`,
`** Idle:** ${ `** Boost Count:** ${$.guild.premiumSubscriptionCount || '0'}`,
members.filter((member) => member.presence.status === 'idle') `\u200b`,
.size ])
}`, .addField('Presence', [
`** Do Not Disturb:** ${ `** Online:** ${
members.filter((member) => member.presence.status === 'dnd') members.filter(
.size (member) => member.presence.status === 'online',
}`, ).size
`** Offline:** ${ }`,
members.filter( `** Idle:** ${
(member) => member.presence.status === 'offline', members.filter((member) => member.presence.status === 'idle')
).size .size
}`, }`,
'\u200b', `** Do Not Disturb:** ${
]) members.filter((member) => member.presence.status === 'dnd')
.addField( .size
`Roles [${roles.length - 1}]`, }`,
roles.length < 10 `** Offline:** ${
? roles.join(', ') members.filter(
: roles.length > 10 (member) => member.presence.status === 'offline',
? this.client.utils.trimArray(roles) ).size
: 'None', }`,
) '\u200b',
.setTimestamp(); ])
.addField(
$.channel.send(embed); `Roles [${roles.length - 1}]`,
} else { roles.length < 10
$.channel.send('Please execute this command in a guild.'); ? roles.join(', ')
} : roles.length > 10
}, ? trimArray(roles)
}), : 'None',
}, )
user: new Command({ .setTimestamp();
description: 'Displays info about mentioned user.',
async run($: CommonLibrary): Promise<any> { $.channel.send(embed);
// Transforms the User object into a GuildMember object of the current guild. } else {
const member = $.guild?.members.resolve($.args[0]); $.channel.send('Please execute this command in a guild.');
}
if (!member) },
return $.channel.send( }),
'No member object was found by that user! Are you sure you used this command in a server?', },
); user: new Command({
description: 'Displays info about mentioned user.',
const roles = member.roles.cache async run($: CommonLibrary): Promise<any> {
.sort( // Transforms the User object into a GuildMember object of the current guild.
(a: { position: number }, b: { position: number }) => const member = $.guild?.members.resolve($.args[0]);
b.position - a.position,
) if (!member)
.map((role: { toString: () => any }) => role.toString()) return $.channel.send(
.slice(0, -1); 'No member object was found by that user! Are you sure you used this command in a server?',
// @ts-ignore - Discord.js' typings seem to be outdated here. According to their v12 docs, it's User.fetchFlags() instead of User.flags. );
const userFlags = ((await member.user.fetchFlags()) as UserFlags).toArray();
const roles = member.roles.cache
const embed = new MessageEmbed() .sort(
.setThumbnail( (a: { position: number }, b: { position: number }) =>
member.user.displayAvatarURL({ dynamic: true, size: 512 }), b.position - a.position,
) )
.setColor(member.displayHexColor || 'BLUE') .map((role: { toString: () => any }) => role.toString())
.addField('User', [ .slice(0, -1);
`** Username:** ${member.user.username}`, // @ts-ignore - Discord.js' typings seem to be outdated here. According to their v12 docs, it's User.fetchFlags() instead of User.flags.
`** Discriminator:** ${member.user.discriminator}`, const userFlags = ((await member.user.fetchFlags()) as UserFlags).toArray();
`** ID:** ${member.id}`,
`** Flags:** ${userFlags.length ? userFlags.join(', ') : 'None'}`, const embed = new MessageEmbed()
`** Avatar:** [Link to avatar](${member.user.displayAvatarURL({ .setThumbnail(
dynamic: true, member.user.displayAvatarURL({ dynamic: true, size: 512 }),
})})`, )
`** Time Created:** ${moment(member.user.createdTimestamp).format( .setColor(member.displayHexColor || 'BLUE')
'LT', .addField('User', [
)} ${moment(member.user.createdTimestamp).format('LL')} ${moment( `** Username:** ${member.user.username}`,
member.user.createdTimestamp, `** Discriminator:** ${member.user.discriminator}`,
).fromNow()}`, `** ID:** ${member.id}`,
`** Status:** ${member.user.presence.status}`, `** Flags:** ${userFlags.length ? userFlags.join(', ') : 'None'}`,
`** Game:** ${ `** Avatar:** [Link to avatar](${member.user.displayAvatarURL({
member.user.presence.activities || 'Not playing a game.' dynamic: true,
}`, })})`,
]) `** Time Created:** ${moment(member.user.createdTimestamp).format(
.addField('Member', [ 'LT',
`** Highest Role:** ${ )} ${moment(member.user.createdTimestamp).format('LL')} ${moment(
member.roles.highest.id === $.guild?.id member.user.createdTimestamp,
? 'None' ).fromNow()}`,
: member.roles.highest.name `** Status:** ${member.user.presence.status}`,
}`, `** Game:** ${
`** Server Join Date:** ${moment(member.joinedAt).format('LL LTS')}`, member.user.presence.activities || 'Not playing a game.'
`** Hoist Role:** ${ }`,
member.roles.hoist ? member.roles.hoist.name : 'None' ])
}`, .addField('Member', [
`** Roles:** [${roles.length}]: ${ `** Highest Role:** ${
roles.length < 10 member.roles.highest.id === $.guild?.id
? roles.join(', ') ? 'None'
: roles.length > 10 : member.roles.highest.name
? this.client.utils.trimArray(roles) }`,
: 'None' `** Server Join Date:** ${moment(member.joinedAt).format('LL LTS')}`,
}`, `** Hoist Role:** ${
]); member.roles.hoist ? member.roles.hoist.name : 'None'
$.channel.send(embed); }`,
}, `** Roles:** [${roles.length}]: ${
}), roles.length < 10
}); ? roles.join(', ')
: roles.length > 10
? this.client.utils.trimArray(roles)
: 'None'
}`,
]);
$.channel.send(embed);
},
}),
});