commands/dequeue.js

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


/**
 * Dequeue the next user, to perform an action.
 *  
 * @author Maksim Sandybekov
 * @date 10.05.2020
 * @version 1.0
 * 
 * @extends Command
 */
class Dequeue extends Command {

    /**
     * @constructor
     * @param {*} fileName 
     */
    constructor(fileName) {
        super(fileName);

    }
    

    execute(message, args) {

         // Stop direct messages, check if channel is configured for communication
         let com = new Communication(message);
         let userId = com.getUserId();
         if (com.isDirect()) {
             return message.channel.send(com.getDefaults("directMessage", userId));
         }
 
         // Communication on channel is not allowed
         let asAdmin = true;
         if (!com.isAllowed(asAdmin)) {
             return message.channel.send(com.getReason());
         }

        // Can't get the next person, queue is empty
        let guildId = com.getGuildId();
        let key = "queue." + guildId;
        let queue = this.storage.get(key);
        if (!queue || queue.count <= 0) {
            return message.channel.send(this.getResponse("queueEmpty", userId));

        }

        // Get next member and update queue
        let nextUser = queue.member.shift();
        this.storage.set(key, {member: queue.member, count: --queue.count});
        
        // Update memberCache of calling admin
        let adminKey = "admin." + guildId + "." + userId + ".cachedMembers";
        this.storage.set(adminKey, nextUser);

        return message.channel.send(this.getResponse("nextUp", nextUser.id));
    }   
}


module.exports = Dequeue;