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

View file

@ -1,197 +1,206 @@
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.',
run: 'Please provide an argument.\nFor help, run `%prefix%help info`.',
subcommands: {
avatar: new Command({
description: "Shows your own, or another user's avatar.",
usage: '(<user>)',
async run($: CommonLibrary): Promise<any> {
$.channel.send(
$.author.displayAvatarURL({ dynamic: true, size: 2048 }),
);
},
user: new Command({
description: "Shows your own, or another user's avatar.",
async run($: CommonLibrary): Promise<any> {
$.channel.send(
$.args[0].displayAvatarURL({ dynamic: true, size: 2048 }),
);
},
}),
}),
guild: new Command({
description: 'Displays info about the current guild.',
async run($: CommonLibrary): Promise<any> {
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<any> {
// Transforms the User object into a GuildMember object of the current guild.
const member = $.guild?.members.resolve($.args[0]);
if (!member)
return $.channel.send(
'No member object was found by that user! Are you sure you used this command in a server?',
);
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);
// @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 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.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.activities || '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);
},
}),
});
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';
function trimArray(arr: any, maxLen = 10) {
if (arr.length > maxLen) {
const len = arr.length - maxLen;
arr = arr.slice(0, maxLen);
arr.push(`${len} more...`);
}
return arr;
}
export default new Command({
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`.',
subcommands: {
avatar: new Command({
description: "Shows your own, or another user's avatar.",
usage: '(<user>)',
async run($: CommonLibrary): Promise<any> {
$.channel.send(
$.author.displayAvatarURL({ dynamic: true, size: 2048 }),
);
},
user: new Command({
description: "Shows your own, or another user's avatar.",
async run($: CommonLibrary): Promise<any> {
$.channel.send(
$.args[0].displayAvatarURL({ dynamic: true, size: 2048 }),
);
},
}),
}),
guild: new Command({
description: 'Displays info about the current guild.',
async run($: CommonLibrary): Promise<any> {
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
? 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<any> {
// Transforms the User object into a GuildMember object of the current guild.
const member = $.guild?.members.resolve($.args[0]);
if (!member)
return $.channel.send(
'No member object was found by that user! Are you sure you used this command in a server?',
);
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);
// @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 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.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.activities || '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);
},
}),
});