Pronto logo

Pronto

source

handlers/verifyBotPermissions.js

View on GitHub

'use strict';

const Discord = require('discord.js');

const { settings: { PERMISSIONS_INTEGER } } = require('../config');
const { embedScaffold, findGuildConfiguration } = require('../handlers');

const currentlyMissing = new Set();

/** */

/**
 *
 * @function handlers.verifyBotPermissions
 * @param {Discord.Guild} guild The \<Guild> to verify permissions for
 * @param {Discord.PermissionString[]} [changes]
 */
module.exports = async (guild, changes) => {
	const { ids: { guildId }, colours } = await findGuildConfiguration(guild);

	if (!guildId) return;

	const requiredPermissions = new Discord.Permissions(PERMISSIONS_INTEGER);
	const botPermissions = guild.me.permissions;
	const hasRequired = botPermissions.has(requiredPermissions);

	const missingPermissions = [...new Set([...requiredPermissions].filter(value => !botPermissions.has(value)))];

	if (!hasRequired) {
		currentlyMissing.add(guild.id);
		embedScaffold(guild, null, 'I do not have my minimum permissions!', colours.error, 'DEBUG', 'Missing Permissions', missingPermissions);
	}

	else if (changes && currentlyMissing.has(guild.id)) {
		const requiredArray = requiredPermissions.toArray();

		for (let i = 0; i < changes.length; i++) {
			if (requiredArray.includes(changes[i])) {
				embedScaffold(guild, null, 'Permissions resolved.', colours.success, 'DEBUG');
				currentlyMissing.delete(guild.id);
				break;
			}
		}
	}
};