2022-01-05 00:24:57 +05:00
|
|
|
const { Permissions } = require("discord.js");
|
2022-01-04 02:18:28 +05:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Fetch user informations (stats, guilds, etc...)
|
|
|
|
* @param {object} userData The oauth2 user informations
|
|
|
|
* @param {object} client The discord client instance
|
|
|
|
* @param {string} query The optional query for guilds
|
|
|
|
* @returns {object} The user informations
|
|
|
|
*/
|
|
|
|
async function fetchUser(userData, client, query) {
|
|
|
|
if (userData.guilds) {
|
|
|
|
userData.guilds.forEach((guild) => {
|
|
|
|
if (!client.guilds.cache.get(guild.id)) return;
|
2022-01-13 18:55:13 +05:00
|
|
|
// eslint-disable-next-line no-undef
|
2022-01-05 00:24:57 +05:00
|
|
|
const perms = new Permissions(BigInt(guild.permissions));
|
|
|
|
if (perms.has(Permissions.FLAGS.MANAGE_GUILD)) guild.admin = true;
|
2022-01-04 02:18:28 +05:00
|
|
|
|
|
|
|
guild.settingsUrl = (client.guilds.cache.get(guild.id) ? `/manage/${guild.id}/` : `https://discordapp.com/oauth2/authorize?client_id=${client.user.id}&scope=bot&permissions=8&guild_id=${guild.id}`);
|
|
|
|
guild.statsUrl = (client.guilds.cache.get(guild.id) ? `/stats/${guild.id}/` : `https://discordapp.com/oauth2/authorize?client_id=${client.user.id}&scope=bot&permissions=8&guild_id=${guild.id}`);
|
|
|
|
guild.iconURL = (guild.icon ? `https://cdn.discordapp.com/icons/${guild.id}/${guild.icon}.png?size=128` : "https://discordemoji.com/assets/emoji/discordcry.png");
|
|
|
|
guild.displayed = (query ? guild.name.toLowerCase().includes(query.toLowerCase()) : true);
|
|
|
|
});
|
2022-02-14 00:24:48 +05:00
|
|
|
userData.displayedGuilds = userData.guilds.filter(g => g.displayed && g.admin);
|
2022-01-04 02:18:28 +05:00
|
|
|
if (userData.displayedGuilds.length < 1) delete userData.displayedGuilds;
|
2022-01-13 00:26:23 +05:00
|
|
|
}
|
2022-02-14 00:24:48 +05:00
|
|
|
|
2022-01-04 02:18:28 +05:00
|
|
|
const user = await client.users.fetch(userData.id);
|
2022-01-13 18:55:13 +05:00
|
|
|
const userDb = await client.findOrCreateUser({
|
|
|
|
id: user.id
|
|
|
|
}, true);
|
2022-02-14 00:24:48 +05:00
|
|
|
const guildData = await client.guilds.fetch(userData.guilds.filter(g => g.displayed)[0].id);
|
|
|
|
const userPresence = guildData.members.cache.get(user.id).presence;
|
|
|
|
|
2022-01-13 18:55:13 +05:00
|
|
|
const userInfos = {
|
|
|
|
...user.toJSON(),
|
|
|
|
...userDb,
|
2022-02-14 00:24:48 +05:00
|
|
|
...userData,
|
|
|
|
...userPresence
|
2022-01-13 18:55:13 +05:00
|
|
|
};
|
2022-01-04 02:18:28 +05:00
|
|
|
|
|
|
|
return userInfos;
|
2022-01-13 00:26:23 +05:00
|
|
|
}
|
2022-01-04 02:18:28 +05:00
|
|
|
|
2022-01-13 18:55:13 +05:00
|
|
|
/**
|
|
|
|
* Fetch users informations
|
|
|
|
* @param {object} array The array of users
|
|
|
|
* @param {object} client The discord client instance
|
|
|
|
* @returns {object} The user informations
|
|
|
|
*/
|
|
|
|
async function fetchUsers(array, client) {
|
|
|
|
return new Promise((resolve) => {
|
|
|
|
const users = [];
|
|
|
|
array.filter((e) => e.id).forEach((element) => {
|
2022-01-13 19:49:12 +05:00
|
|
|
client.users.fetch(element.id).then(user => {
|
|
|
|
if (user.username.length > 15) user.username = user.username.substr(0, 12) + "...";
|
|
|
|
|
2022-01-13 18:55:13 +05:00
|
|
|
users.push({
|
|
|
|
...{
|
|
|
|
money: element.money,
|
|
|
|
level: element.level,
|
|
|
|
rep: element.rep
|
|
|
|
},
|
|
|
|
...user.toJSON()
|
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|
|
|
|
resolve(users);
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Fetch guild informations
|
|
|
|
* @param {string} guildID The ID of the guild to fetch
|
|
|
|
* @param {object} client The discord client instance
|
|
|
|
* @param {array} guilds The user guilds
|
|
|
|
* @returns {object} The guild informations
|
|
|
|
*/
|
|
|
|
async function fetchGuild(guildID, client, guilds) {
|
|
|
|
const guild = client.guilds.cache.get(guildID);
|
|
|
|
const conf = await client.findOrCreateGuild({
|
|
|
|
id: guild.id
|
|
|
|
});
|
|
|
|
|
|
|
|
return {
|
|
|
|
...guild,
|
|
|
|
...conf.toJSON(),
|
|
|
|
...guilds.find((g) => g.id === guild.id)
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
function sortArrayOfObjects(key, arr) {
|
|
|
|
const array = arr.slice(0);
|
|
|
|
return array.sort((a, b) => {
|
|
|
|
return b[key] - a[key];
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
module.exports = { fetchUser, fetchUsers, fetchGuild, sortArrayOfObjects };
|