commands/cancel.js

const Command = require('../core/command');
const Communication = require('../core/communication');


/**
 * Remove a enqueued user from the queue.
 * 
 * @author Maksim Sandybekov
 * @date 11.05.2020
 * @version 1.0
 * 
 * @extends Command
 */
class Cancel extends Command {

    /**
     * @constructor
     * @param {*} fileName The filename in which the command is defined, stripped by the extension.
     */
    constructor(fileName) {
        super(fileName, {description: "Remove a specific user from the queue."});
        
    }   

    execute(message, args) {

        // Stop direct messages, check if channel is configured for communication
        let com = new Communication(message);
        if (com.isDirect()) {
            return message.channel.send(com.getDefaults("directMessage", com.getUserId()));
        }

        // Communication on channel is not allowed
        if (!com.isAllowed()) {
            return message.channel.send(com.getReason());
        }
        
        let key = "queue." + message.guild.id;
        let queue = this.storage.get(key) || {"member": [], "count": 0};

        let userId = message.member? message.member.id : message.author.id;
        let newMembers = queue.member.filter(member => member.id != userId);

        // Remove found user and update the queue
        let responseMessage = this.getResponse("notInQueue", userId);
        if (newMembers.length < queue.member.length) {
            
            this.storage.set(key, {member: newMembers, count: --queue.count});
            responseMessage = this.getResponse("removedUser", userId);
        }

        return message.channel.send(responseMessage);
    }
}


module.exports = Cancel;