forked from Galactic/galactic-bot
85 lines
3.3 KiB
JavaScript
85 lines
3.3 KiB
JavaScript
|
const { Command } = require('../../../../interfaces/');
|
||
|
const { stripIndents } = require('common-tags');
|
||
|
const similarity = require('similarity');
|
||
|
|
||
|
class UserCommand extends Command {
|
||
|
|
||
|
constructor(client) {
|
||
|
|
||
|
super(client, {
|
||
|
name: 'user',
|
||
|
module: 'utility',
|
||
|
description: "Display information about user."
|
||
|
});
|
||
|
|
||
|
this.client = client;
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
async execute(message, { args, params }) {
|
||
|
|
||
|
console.log(args, params);
|
||
|
let search = params[0] ? params[0].toLowerCase() === 'search' : false;
|
||
|
let response = '';
|
||
|
if(search && params.length > 1) {
|
||
|
|
||
|
params.shift();
|
||
|
let key = params.join(' '), count = 0;
|
||
|
|
||
|
let members = message.guild.members.cache.filter(m => {
|
||
|
return (m.nickname && (m.nickname.toLowerCase().includes(key) || (similarity(m.nickname.toLowerCase(), key) > 0.75 && Math.abs(m.nickname.length - key.length) < 3) )) ||
|
||
|
m.user.username.toLowerCase().includes(key) || (similarity(m.user.username.toLowerCase(), key) > 0.75 && Math.abs(m.user.username.length - key.length) < 3);
|
||
|
});
|
||
|
|
||
|
for(let [ id, member ] of members) {
|
||
|
response += `${member.user.tag} ${member.nickname ? `- ${member.nickname}` : '' } [${id}]\n`;
|
||
|
count++;
|
||
|
if(response.length > 1900) break;
|
||
|
}
|
||
|
|
||
|
response = {
|
||
|
embed: {
|
||
|
description: response,
|
||
|
title: `Search result for keyword: \`${key}\``,
|
||
|
color: 0x0088cc,
|
||
|
footer: {
|
||
|
text: `Found ${members.size} matches, displaying ${count}`
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
} else {
|
||
|
|
||
|
let user = await this.client.resolver.resolveUser(params.length > 0 ? params.join(' ') : message.author.id).catch(console.error);
|
||
|
if(!user) return message.respond('No user found.');
|
||
|
let member = await message.guild.members.fetch(user.id).catch(console.error);
|
||
|
|
||
|
response = {
|
||
|
embed: {
|
||
|
title: `**${user.tag}** (${user.id})`,
|
||
|
description: stripIndents`
|
||
|
**Nickname:** ${member && member.nickname ? member.nickname : 'N/A'}
|
||
|
**User:** <@${user.id}>
|
||
|
**Server join date:** ${member && member.joinedAt ? member.joinedAt.toDateString() : 'N/A'}
|
||
|
**Account created:** ${user.createdAt.toDateString()}
|
||
|
**Status:** ${user.presence.status}
|
||
|
**Activity:** ${user.presence.activities.length > 0 ? user.presence.activities[0].name : 'N/A' }
|
||
|
**Last server activity:** ${member && member.lastMessage ? member.lastMessage.createdAt.toDateString() : 'N/A' }
|
||
|
**Last global activity:** ${user.lastMessage ? user.lastMessage.createdAt.toDateString() : 'N/A'}
|
||
|
${member ? `**Roles:** ${member.roles.cache.filter(r=>r.name !== '@everyone').map(r=>r.name).join(', ')}` : '' }
|
||
|
`,
|
||
|
thumbnail: {
|
||
|
url: user.avatarURL() || user.defaultAvatarURL
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
}
|
||
|
|
||
|
return message.respond(response);
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
module.exports = UserCommand;
|