diff options
Diffstat (limited to 'src/commands/info')
-rw-r--r-- | src/commands/info/userInfo.ts | 144 |
1 files changed, 87 insertions, 57 deletions
diff --git a/src/commands/info/userInfo.ts b/src/commands/info/userInfo.ts index a129182..50cb1a8 100644 --- a/src/commands/info/userInfo.ts +++ b/src/commands/info/userInfo.ts @@ -9,7 +9,6 @@ import { } from '#lib'; import { ActivityType, ApplicationCommandOptionType, Embed, PermissionFlagsBits, UserFlags } from 'discord.js'; -// TODO: Add bot information export default class UserInfoCommand extends BushCommand { public constructor() { super('userInfo', { @@ -56,10 +55,12 @@ export default class UserInfoCommand extends BushCommand { const emojis = []; const superUsers = util.getShared('superUsers'); - const userEmbed: Embed = new Embed() + const userEmbed = new Embed() .setTitle(util.discord.escapeMarkdown(user.tag)) .setThumbnail(user.displayAvatarURL({ size: 2048, extension: 'png' })) - .setTimestamp(); + .setTimestamp() + .setFooter({ text: user.tag }) + .setColor(member?.displayColor ?? util.colors.default); // Flags if (client.config.owners.includes(user.id)) emojis.push(client.consts.mappings.otherEmojis.Developer); @@ -89,78 +90,105 @@ export default class UserInfoCommand extends BushCommand { else if (member?.permissions.has(PermissionFlagsBits.Administrator)) emojis.push(client.consts.mappings.otherEmojis.Admin); if (member?.premiumSinceTimestamp) emojis.push(client.consts.mappings.otherEmojis.Booster); + await this.generateGeneralInfoField(userEmbed, user); + + this.generateServerInfoField(userEmbed, member); + + this.generatePresenceField(userEmbed, member); + + this.generateRolesField(userEmbed, member); + + this.generatePermissionsField(userEmbed, member); + + if (emojis) userEmbed.setDescription(`\u200B${emojis.filter((e) => e).join(' ')}`); // zero width space + return userEmbed; + } + + private static async generateGeneralInfoField(embed: Embed, user: BushUser) { const createdAt = util.timestamp(user.createdAt), - createdAtDelta = util.dateDelta(user.createdAt), - joinedAt = util.timestamp(member?.joinedAt), - joinedAtDelta = member && member.joinedAt ? util.dateDelta(member.joinedAt, 2) : undefined, - premiumSince = util.timestamp(member?.premiumSince), - premiumSinceDelta = member && member.premiumSince ? util.dateDelta(member.premiumSince, 2) : undefined; + createdAtDelta = util.dateDelta(user.createdAt); // General Info const generalInfo = [`**Mention:** <@${user.id}>`, `**ID:** ${user.id}`, `**Created:** ${createdAt} (${createdAtDelta} ago)`]; if (user.accentColor !== null) generalInfo.push(`**Accent Color:** ${user.hexAccentColor}`); if (user.banner) generalInfo.push(`**Banner:** [link](${user.bannerURL({ extension: 'png', size: 4096 })})`); - const pronouns = await Promise.race([util.getPronounsOf(user), util.sleep(2)]); + + const pronouns = await Promise.race([util.getPronounsOf(user), util.sleep(2)]); // cut off request after 2 seconds + if (pronouns && typeof pronouns === 'string') generalInfo.push(`**Pronouns:** ${pronouns}`); - userEmbed.addField({ name: '» General Info', value: generalInfo.join('\n') }); + embed.addField({ name: '» General Info', value: generalInfo.join('\n') }); + } + + private static generateServerInfoField(embed: Embed, member?: BushGuildMember | undefined) { + if (!member) return; + + const joinedAt = util.timestamp(member?.joinedAt), + joinedAtDelta = member.joinedAt ? util.dateDelta(member.joinedAt, 2) : undefined, + premiumSince = util.timestamp(member?.premiumSince), + premiumSinceDelta = member.premiumSince ? util.dateDelta(member.premiumSince, 2) : undefined; // Server User Info const serverUserInfo = []; if (joinedAt) - serverUserInfo.push(`**${guild!.ownerId == user.id ? 'Created Server' : 'Joined'}:** ${joinedAt} (${joinedAtDelta} ago)`); + serverUserInfo.push( + `**${member.guild!.ownerId == member.user.id ? 'Created Server' : 'Joined'}:** ${joinedAt} (${joinedAtDelta} ago)` + ); if (premiumSince) serverUserInfo.push(`**Boosting Since:** ${premiumSince} (${premiumSinceDelta} ago)`); if (member?.displayHexColor) serverUserInfo.push(`**Display Color:** ${member.displayHexColor}`); - if (user.id == '322862723090219008' && guild?.id == client.consts.mappings.guilds.bush) + if (member.user.id == '322862723090219008' && member.guild?.id == client.consts.mappings.guilds.bush) serverUserInfo.push(`**General Deletions:** 1⅓`); if ( - (['384620942577369088', '496409778822709251'] as const).includes(user.id) && - guild?.id == client.consts.mappings.guilds.bush + (['384620942577369088', '496409778822709251'] as const).includes(member.user.id) && + member.guild?.id == client.consts.mappings.guilds.bush ) serverUserInfo.push(`**General Deletions:** ⅓`); if (member?.nickname) serverUserInfo.push(`**Nickname:** ${util.discord.escapeMarkdown(member?.nickname)}`); - if (serverUserInfo.length) - userEmbed - .addField({ name: '» Server Info', value: serverUserInfo.join('\n') }) - .setColor(member?.displayColor ?? util.colors.default); + if (serverUserInfo.length) embed.addField({ name: '» Server Info', value: serverUserInfo.join('\n') }); + } + + private static generatePresenceField(embed: Embed, member?: BushGuildMember | undefined) { + if (!member || !member.presence) return; + if (!member.presence.status && !member.presence.clientStatus && !member.presence.activities) return; // User Presence Info - if (member?.presence?.status || member?.presence?.clientStatus || member?.presence?.activities) { - let customStatus = ''; - const activitiesNames: string[] = []; - if (member.presence.activities) { - member.presence.activities.forEach((a) => { - if (a.type == ActivityType.Custom && a.state) { - const emoji = `${a.emoji ? `${a.emoji.toString()} ` : ''}`; - customStatus = `${emoji}${a.state}`; - } - activitiesNames.push(`\`${a.name}\``); - }); - } - let devices; - if (member?.presence.clientStatus) devices = Object.keys(member.presence.clientStatus); - const presenceInfo = []; - if (member?.presence.status) presenceInfo.push(`**Status:** ${member.presence.status}`); - if (devices && devices.length) - presenceInfo.push(`**${devices.length - 1 ? 'Devices' : 'Device'}:** ${util.oxford(devices, 'and', '')}`); - if (activitiesNames.length) - presenceInfo.push(`**Activit${activitiesNames.length - 1 ? 'ies' : 'y'}:** ${util.oxford(activitiesNames, 'and', '')}`); - if (customStatus && customStatus.length) - presenceInfo.push(`**Custom Status:** ${util.discord.escapeMarkdown(customStatus)}`); - userEmbed.addField({ name: '» Presence', value: presenceInfo.join('\n') }); - - enum statusEmojis { - online = '787550449435803658', - idle = '787550520956551218', - dnd = '787550487633330176', - offline = '787550565382750239', - invisible = '787550565382750239' - } - userEmbed.setFooter({ - text: user.tag, - iconURL: client.emojis.cache.get(statusEmojis[member?.presence.status])?.url ?? undefined + let customStatus = ''; + const activitiesNames: string[] = []; + if (member.presence.activities) { + member.presence.activities.forEach((a) => { + if (a.type == ActivityType.Custom && a.state) { + const emoji = `${a.emoji ? `${a.emoji.toString()} ` : ''}`; + customStatus = `${emoji}${a.state}`; + } + activitiesNames.push(`\`${a.name}\``); }); } + let devices; + if (member?.presence.clientStatus) devices = Object.keys(member.presence.clientStatus); + const presenceInfo = []; + if (member?.presence.status) presenceInfo.push(`**Status:** ${member.presence.status}`); + if (devices && devices.length) + presenceInfo.push(`**${devices.length - 1 ? 'Devices' : 'Device'}:** ${util.oxford(devices, 'and', '')}`); + if (activitiesNames.length) + presenceInfo.push(`**Activit${activitiesNames.length - 1 ? 'ies' : 'y'}:** ${util.oxford(activitiesNames, 'and', '')}`); + if (customStatus && customStatus.length) presenceInfo.push(`**Custom Status:** ${util.discord.escapeMarkdown(customStatus)}`); + embed.addField({ name: '» Presence', value: presenceInfo.join('\n') }); + + enum statusEmojis { + online = '787550449435803658', + idle = '787550520956551218', + dnd = '787550487633330176', + offline = '787550565382750239', + invisible = '787550565382750239' + } + embed.setFooter({ + text: member.user.tag, + iconURL: client.emojis.cache.get(statusEmojis[member?.presence.status])?.url ?? undefined + }); + } + + private static generateRolesField(embed: Embed, member?: BushGuildMember | undefined) { + if (!member || !(member.roles.cache.size < 1)) return; // roles if (member?.roles.cache.size && member?.roles.cache.size - 1) { @@ -168,12 +196,16 @@ export default class UserInfoCommand extends BushCommand { .filter((role) => role.name !== '@everyone') .sort((role1, role2) => role2.position - role1.position) .map((role) => `${role}`); - userEmbed.addField({ name: `» Role${roles.length - 1 ? 's' : ''} [${roles.length}]`, value: roles.join(', ') }); + embed.addField({ name: `» Role${roles.length - 1 ? 's' : ''} [${roles.length}]`, value: roles.join(', ') }); } + } + + private static generatePermissionsField(embed: Embed, member: BushGuildMember | undefined) { + if (!member) return; // Important Perms const perms = []; - if (member?.permissions.has(PermissionFlagsBits.Administrator) || guild?.ownerId == user.id) { + if (member?.permissions.has(PermissionFlagsBits.Administrator) || member.guild?.ownerId == member.user.id) { perms.push('`Administrator`'); } else if (member?.permissions.toArray().length) { member.permissions.toArray().forEach((permission) => { @@ -183,8 +215,6 @@ export default class UserInfoCommand extends BushCommand { }); } - if (perms.length) userEmbed.addField({ name: '» Important Perms', value: perms.join(' ') }); - if (emojis) userEmbed.setDescription(`\u200B${emojis.filter((e) => e).join(' ')}`); // zero width space - return userEmbed; + if (perms.length) embed.addField({ name: '» Important Perms', value: perms.join(' ') }); } } |