/**
 * Inhibitors are functions that are designed to prevent or allow a user to run a command. These can range from
 * checking a users specific permission level to checking if the user is on cooldown.
 * @module Inhibitor
 * @example <caption> They will always follow this structure. </caption>
 * exports.run = (client, msg, cmd) => { // code here };
 * exports.conf = {};
 */

/**
 * The part of the inhibitor that will determine if the user can use the command or not. This function must return one of three things. <br>
 * If the user should be allowed to use the command, you will return false. <br>
 * If the user should prevented from using the command, you will return true. If you do this, the command will be silent. <br>
 * However, if you would like to give the user a message as to why they couldn't use the command, you can also return a String, such as `return "Not enough permissions to use this command."`.
 * @param {KomadaClient}  client The Komada Client
 * @param {Message}  msg A Message object obtained from discord.js
 * @param {Command}  cmd The command that the user is trying to run.
 * @example <caption> This will create an inhibitor that only runs when the commands "requiredUser" configuration property has the message authors id in it. </caption>
 * exports.run = (client, msg, cmd) => {
 *  if (!cmd.conf.requiredUser || !(cmd.conf.requiredUser instanceof Array) || cmd.conf.requiredUser.length === 0) return false;
 *  if (cmd.conf.requiredUser.includes(message.author.id)) return false;
 *  return "You are not allowed to use this command.";
 * }
 * @return {string|boolean}
 */
exports.run = (client, msg, cmd) => ({}); // eslint-disable-line


/**
 * An Object containing configuration values that will configure a inhibitor.
 * @typedef {Object} Conf
 * @property {Boolean} enabled Whether or not this inhibitor should be enabled for use.
 * @property {Number} priority The priority of this inhibitor. **This will probably be removed in the future**
 * @property {Boolean} spamProtection Whether or not we should run this inhibitor in other places, like the help menu.
 */


/**
 * An object that configures the inhibitor.
 * @type {Conf}
 * @example
 * exports.conf = {
   enabled: true,
   priority: 0,
   spamProtection: false
 };
 */
exports.conf = {};