Skip to content
Extraits de code Groupes Projets
VoteParser.js 2,33 Kio
const channelsID = require('./channels_conf.json');
const complotDB = require('../database/ComplotDB.js');

const CATEGORY = {
    ACTION : 0,
    REASON : 1,
    ACTOR : 2
};

class VoteParser{
    
    constructor(client){
        this.client = client;
        this.upVote = '👍';
        this.score = 3;
        this.categories = new Map([
            [channelsID.actor, CATEGORY.ACTOR],
            [channelsID.reason, CATEGORY.REASON],
            [channelsID.action, CATEGORY.ACTION]
        ]);

        this.infoMessage = null;
        this.channelBase = this.client.channels.cache.get(channelsID.base);

    }

    setScore(score) {
        this.score = score;
    }

    parse(message){
        if(this.categories.has(message.channelId)){
            const category = this.categories.get(message.channelId);
            const reactions = message.reactions.resolve(this.upVote);
            if(reactions && reactions.count >= this.score){
                this.add(message, category);
            }
        }
    }

    async add(message, category){
        let content = message.content;
        const char = content.charAt(0);
        const reste = content.slice(1);
        content = (category === CATEGORY.ACTOR) ? char.toUpperCase() + reste: char.toLowerCase() + reste;
        this.addFormatedString(content, category);
        message.delete();
        message.channel.send(`"${content}" ajouté ! \n Par <@${message.author.id}>`);
        const dbString = complotDB.toString();


        if(!this.infoMessage){
            await this.deleteAllMessageInfo();
            this.channelBase.send(dbString).then(message =>{
                this.infoMessage = message;
            });
        }else{

            this.infoMessage.edit(dbString);
        }
       
    }



    addFormatedString(messageString, category){
        switch (category){
            case CATEGORY.ACTOR: complotDB.addActor(messageString); break;
            case CATEGORY.ACTION: complotDB.addAction(messageString); break;
            case CATEGORY.REASON: complotDB.addReason(messageString); break;
        }
    }

    async deleteAllMessageInfo(){

        let messages = await this.channelBase.messages.fetch();
        let workers = [];
        messages.forEach(m=>{
            workers.push(m.delete());
        });
        await Promise.all(workers);
    }

}

module.exports = VoteParser;