JaBa/dashboard/utils.js

98 lines
3.2 KiB
JavaScript
Raw Normal View History

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;
// eslint-disable-next-line no-undef
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);
});
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-01-04 02:18:28 +05:00
const user = await client.users.fetch(userData.id);
const userDb = await client.findOrCreateUser({
id: user.id
}, true);
const guildData = await client.guilds.fetch(userData.guilds.filter(g => g.displayed)[0].id);
const userPresence = guildData.members.cache.get(user.id).presence;
const userInfos = {
...user.toJSON(),
...userDb,
...userData,
...userPresence
};
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
/**
* 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) => {
client.users.fetch(element.id).then(user => {
if (user.username.length > 15) user.username = user.username.substr(0, 12) + "...";
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 };