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;