command-middleware/index.js

class CommandMiddleware {
  /**
   * Class reprsenting command middleware.
   * @param {CommandMiddlewareData} data The middleware data.
   */
  constructor (data) {
    const {
      run = async () => null,
      failMessage = ''
    } = data
    /**
     * @type {string}
     */
    this.failMessage = failMessage
    /**
     * @type {MiddlewareRun}
     */
    this.run = run
  }
}

/**
 * @typedef  CommandMiddlewareData
 * @property {string}        [failMessage='']       A message to send if the middleware fails.
 * @property {MiddlewareRun} [run=async () => null] The middleware runner.
 */

/**
 * @callback MiddlewareRun
 * @param    {DataClient}     bot     The DataClient.
 * @param    {CommandContext} context The CommandContext.
 * @returns  {Promise<unknown>|unknown}
 */

module.exports = CommandMiddleware