galactic-bot/structure/client/components/commands/utility/User.js

100 lines
3.5 KiB
JavaScript
Raw Normal View History

2020-04-21 19:56:31 +02:00
const { Command, Argument } = require('../../../../interfaces/');
const similarity = require('similarity');
class UserCommand extends Command {
constructor(client) {
super(client, {
name: 'user',
module: 'utility',
2020-04-21 19:56:31 +02:00
description: "Display information about user.",
guildOnly: true,
arguments: [
new Argument(client, {
name: 'search',
type: 'string',
types: ['FLAG', 'VERBAL'],
requiredValue: true
}),
]
});
this.client = client;
}
2020-04-21 19:56:31 +02:00
async execute(message, { params, args }) {
let response;
if(args.search && args.search.value.length > 1) {
2020-04-21 19:56:31 +02:00
let key = args.search.value,
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 = {
description: response,
2020-04-21 19:56:31 +02:00
title: message.format('C_SEARCH_USER_TITLE', {
key: key
}),
color: 0x0088cc,
footer: {
2020-04-21 19:56:31 +02:00
text: message.format('C_SEARCH_USER_FOOTER', {
matches: members.size,
count
})
}
};
} else {
2020-04-21 19:56:31 +02:00
let user;
if (params.length > 0) {
user = await this.client.resolver.resolveUser(params.join(' ')).catch(console.error);
if (!user) return message.respond('No user found.');
} else user = message.author;
let member = await message.guild.members.fetch(user.id).catch(console.error);
response = message.format('C_USER', {
nickname: member && member.nickname ? member.nickname : 'N/A',
id: user.id,
joined: member && member.joinedAt ? member.joinedAt.toDateString() : 'N/A',
created: user.createdAt.toDateString(),
status: user.presence.status,
activity: user.presence.activities.length > 0 ? user.presence.activities[0].name : 'N/A',
serverActivity: member && member.lastMessage ? member.lastMessage.createdAt.toDateString() : 'N/A',
globalActivity: user.lastMessage ? user.lastMessage.createdAt.toDateString() : 'N/A',
roles: member ? member.roles.cache.filter(r => r.name !== '@everyone').map(r => r.name).join(', ') : 'N/A'
});
response = {
title: `**${user.tag}** (${user.id})`,
description: response,
thumbnail: {
url: user.avatarURL() || user.defaultAvatarURL
}
};
}
return message.embed(response);
}
}
module.exports = UserCommand;