/* 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; } }