From 708ec88947af0400122649fbf36c772ce8b9d27d Mon Sep 17 00:00:00 2001 From: Matthew R Date: Tue, 14 Apr 2020 19:02:12 -0400 Subject: [PATCH] add whois command --- src/commands/whois.ts | 88 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 src/commands/whois.ts diff --git a/src/commands/whois.ts b/src/commands/whois.ts new file mode 100644 index 0000000..5b5bcea --- /dev/null +++ b/src/commands/whois.ts @@ -0,0 +1,88 @@ +/* eslint-disable no-bitwise */ +import moment from 'moment'; +import { Message, Member } from 'eris'; +import { Client, Command, RichEmbed } from '../class'; +import acknowledgements from '../configs/acknowledgements.json'; + +export default class Whois extends Command { + constructor(client: Client) { + super(client); + this.name = 'whois'; + this.description = 'Provides information on a member.'; + this.permissions = 0; + this.guildOnly = true; + this.enabled = true; + } + + public async run(message: Message, args: string[]) { + let member: Member; + if (!args[0]) member = message.member; + else { + // @ts-ignore + member = this.client.util.resolveMember(message, args[0], message.channel.guild); + if (!member) { + return message.channel.createMessage(`***${this.client.util.emojis.ERROR} Member not found.***`); + } + } + const embed = new RichEmbed(); + embed.setAuthor(`${member.user.username}#${member.user.discriminator}`, member.user.avatarURL); + embed.setThumbnail(member.avatarURL); + const ackResolve = this.resolveStaffInformation(member.id); + let description = ''; + if (ackResolve?.title && ackResolve?.dept) { + description += `<:loc:607695848612167700> __**${ackResolve.title}**__, ${ackResolve.dept}\n\n`; + } + if (ackResolve?.emailAddress) { + description += `<:email:699730553858949273> ${ackResolve.emailAddress}\n`; + } + if (ackResolve?.gitlab) { + description += `<:gitlab:699729689220218932> ${ackResolve.gitlab}\n`; + } + if (ackResolve?.github) { + description += `<:github:699729719826055179> ${ackResolve.github}\n`; + } + if (ackResolve?.bio) { + description += `<:bio:699731093179596854> *${ackResolve.bio}*\n`; + } + description += `\n<@${member.id}>`; + embed.setDescription(description); + // @ts-ignore + for (const role of member.roles.map((r) => message.channel.guild.roles.get(r)).sort((a, b) => b.position - a.position)) { + if (role.color !== 0) { + embed.setColor(role.color); + break; + } + } + embed.addField('Status', `${member.status[0].toUpperCase()}${member.status.slice(1)}`, true); + embed.addField('Joined At', `${moment(new Date(message.member.joinedAt)).format('dddd, MMMM Do YYYY, h:mm:ss A')} ET`, true); + embed.addField('Created At', `${moment(new Date(message.author.createdAt)).format('dddd, MMMM Do YYYY, h:mm:ss A')} ET`, true); + // @ts-ignore + embed.addField(`Roles [${member.roles.length}]`, member.roles.map((r) => message.channel.guild.roles.get(r)).sort((a, b) => b.position - a.position).map((r) => `<@&${r.id}>`).join(', ')); + const permissions: string[] = []; + const bit = member.permission.allow; + if (this.client.guilds.get(this.client.config.guildID).ownerID === member.id) permissions.push('Owner'); + if ((bit | 8) === bit) permissions.push('Administrator'); + if ((bit | 20) === bit) permissions.push('Manage Server'); + if ((bit | 10) === bit) permissions.push('Manage Channels'); + if ((bit | 268435456) === bit) permissions.push('Manage Roles'); + if ((bit | 8192) === bit) permissions.push('Manage Messages'); + if ((bit | 134217728) === bit) permissions.push('Manage Nicknames'); + if ((bit | 1073741824) === bit) permissions.push('Manage Emojis'); + if ((bit | 4) === bit) permissions.push('Ban Members'); + if ((bit | 2) === bit) permissions.push('Kick Members'); + if (permissions.length > 0) { + embed.addField('Permissions', permissions.join(', ')); + } + if (ackResolve?.acknowledgements) { + embed.addField('Bot Acknowledgements', ackResolve.acknowledgements.join(', ')); + } + embed.setFooter(this.client.user.username, this.client.user.avatarURL); + embed.setTimestamp(); + return message.channel.createMessage({ embed }); + } + + public resolveStaffInformation(id: string) { + const ack = acknowledgements.find((m) => m.id === id); + return ack; + } +}