2021-02-18 20:41:35 +02:00
|
|
|
|
2021-08-16 23:05:20 +03:00
|
|
|
const {
|
|
|
|
Guild, // eslint-disable-line no-unused-vars
|
|
|
|
GuildMember // eslint-disable-line no-unused-vars
|
|
|
|
} = require('discord.js');
|
|
|
|
const config = require('../../user/config');
|
2021-02-18 20:41:35 +02:00
|
|
|
let current_presence = -1;
|
|
|
|
|
2021-08-16 23:05:20 +03:00
|
|
|
module.exports = class DiscordUtils {
|
|
|
|
constructor(client) {
|
|
|
|
this.client = client;
|
|
|
|
}
|
|
|
|
|
2021-04-05 20:38:00 +03:00
|
|
|
/**
|
2021-08-16 23:05:20 +03:00
|
|
|
* Generate embed footer text
|
2021-05-22 02:04:18 +03:00
|
|
|
* @param {string} text
|
|
|
|
* @param {string} [additional]
|
2021-04-05 20:38:00 +03:00
|
|
|
* @returns {string}
|
|
|
|
*/
|
2021-08-16 23:05:20 +03:00
|
|
|
footer(text, additional) {
|
2021-04-05 20:38:00 +03:00
|
|
|
if (text && additional) return `${text} | ${additional}`;
|
2021-04-25 17:40:07 +03:00
|
|
|
else return additional || text || '';
|
2021-08-16 23:05:20 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Check if a guild member is staff
|
|
|
|
* @param {GuildMember} member - the guild member
|
|
|
|
* @returns {boolean}
|
|
|
|
*/
|
|
|
|
async isStaff(member) {
|
|
|
|
const guild_categories = await this.client.db.models.Category.findAll({ where: { guild: member.guild.id } });
|
|
|
|
return guild_categories.some(cat => cat.roles.some(r => member.roles.cache.has(r)));
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* get a guild's settings
|
|
|
|
* @param {Guild} guild - The Guild
|
|
|
|
* @returns {Promise<Model>}
|
|
|
|
*/
|
|
|
|
async getSettings(guild) {
|
|
|
|
const data = { id: guild.id };
|
|
|
|
const [settings] = await this.client.db.models.Guild.findOrCreate({
|
|
|
|
defaults: data,
|
|
|
|
where: data
|
|
|
|
});
|
|
|
|
return settings;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Delete a guild's settings
|
|
|
|
* @param {Guild} guild - The Guild
|
|
|
|
* @returns {Promise<Number>}
|
|
|
|
*/
|
|
|
|
async deleteSettings(guild) {
|
|
|
|
const row = await this.getSettings(guild);
|
|
|
|
return await row.destroy();
|
|
|
|
}
|
|
|
|
|
2021-02-18 20:41:35 +02:00
|
|
|
/**
|
|
|
|
* Select a presence from the config
|
2021-04-05 20:38:00 +03:00
|
|
|
* @returns {PresenceData}
|
2021-02-18 20:41:35 +02:00
|
|
|
*/
|
2021-08-16 23:05:20 +03:00
|
|
|
static selectPresence() {
|
2021-05-18 20:12:07 +03:00
|
|
|
const length = config.presence.presences.length;
|
2021-02-18 20:41:35 +02:00
|
|
|
if (length === 0) return {};
|
2021-05-22 02:04:18 +03:00
|
|
|
|
2021-02-18 20:41:35 +02:00
|
|
|
let num;
|
2021-05-22 02:04:18 +03:00
|
|
|
if (length === 1) {
|
2021-02-18 20:41:35 +02:00
|
|
|
num = 0;
|
2021-05-22 02:04:18 +03:00
|
|
|
} else if (config.presence.randomise) {
|
2021-02-18 20:41:35 +02:00
|
|
|
num = Math.floor(Math.random() * length);
|
2021-05-22 02:04:18 +03:00
|
|
|
} else {
|
2021-02-18 20:41:35 +02:00
|
|
|
current_presence = current_presence + 1; // ++ doesn't work on negative numbers
|
2021-05-22 02:04:18 +03:00
|
|
|
if (current_presence === length) {
|
2021-02-18 20:41:35 +02:00
|
|
|
current_presence = 0;
|
2021-05-22 02:04:18 +03:00
|
|
|
}
|
2021-02-18 20:41:35 +02:00
|
|
|
num = current_presence;
|
|
|
|
}
|
|
|
|
|
2021-05-18 20:12:07 +03:00
|
|
|
const {
|
2021-02-18 20:41:35 +02:00
|
|
|
activity: name,
|
|
|
|
status,
|
|
|
|
type,
|
|
|
|
url
|
|
|
|
} = config.presence.presences[num];
|
|
|
|
|
|
|
|
return {
|
2021-08-16 23:05:20 +03:00
|
|
|
activities: [
|
|
|
|
{
|
|
|
|
name,
|
|
|
|
type,
|
|
|
|
url
|
|
|
|
}
|
|
|
|
],
|
2021-02-18 20:41:35 +02:00
|
|
|
status
|
|
|
|
};
|
2021-05-22 02:04:18 +03:00
|
|
|
}
|
2021-02-18 20:41:35 +02:00
|
|
|
};
|