UNPKG

pockybot

Version:

Spark bot that handles team recognition

65 lines (64 loc) 3.47 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.DefaultResultsService = void 0; const constants_1 = require("../../constants"); const logger_1 = require("../logger"); const fs = require("fs"); const storage_1 = require("@google-cloud/storage"); const helpers_1 = require("../helpers/helpers"); class DefaultResultsService { constructor(database, formatResultsService, pegService, winnersService) { this.database = database; this.formatResultsService = formatResultsService; this.pegService = pegService; this.winnersService = winnersService; } async returnResultsMarkdown() { const now = new Date(); const todayString = now.getFullYear() + '-' + (now.getMonth() + 1) + '-' + now.getDate() + '-' + now.getHours() + '-' + now.getMinutes() + '-' + now.getSeconds(); const filePath = `${__dirname}/../../../pegs-${todayString}`; if (fs.existsSync(filePath + '.txt')) { fs.unlinkSync(filePath + '.txt'); } logger_1.Logger.information("[ResultsService.returnResultsMarkdown] File path: " + filePath); const fullData = await this.database.returnResults(); const allPegs = await this.pegService.getPegs(fullData); const fullResults = this.getResults(allPegs); const winners = this.winnersService.getWinners(allPegs); const html = await this.formatResultsService.returnResultsHtml(fullResults, winners); fs.writeFileSync(filePath + '.html', html); const client = new storage_1.Storage(); let response = await client.bucket(process.env.GCLOUD_BUCKET_NAME).upload(filePath + '.html'); let file = response[0]; await file.makePublic(); const fileUrl = `${constants_1.default.googleUrl}${process.env.GCLOUD_BUCKET_NAME}/pegs-${todayString}.html`; const markdown = `[Here are all pegs given this cycle](${fileUrl})`; return markdown; } getResults(pegs) { const allPegReceivers = helpers_1.distinct(pegs.map(peg => peg.receiverId)); const allPegSenders = helpers_1.distinct(pegs.map(peg => peg.senderId)); const allPeople = helpers_1.distinct(allPegSenders.concat(allPegReceivers)); let results = []; allPeople.forEach(personId => { const validPegsReceived = pegs.filter(peg => peg.receiverId === personId && peg.isValid); const penaltyPegsGiven = pegs.filter(peg => peg.senderId === personId && !peg.isValid); if (validPegsReceived.length > 0 || penaltyPegsGiven.length > 0) { const validPegsTotal = validPegsReceived.reduce((a, b) => a + b.pegWeighting, 0); const personName = validPegsReceived.length > 0 ? validPegsReceived[0].receiverName : penaltyPegsGiven[0].senderName; const personLocation = validPegsReceived.length > 0 ? validPegsReceived[0].receiverLocation : penaltyPegsGiven[0].senderLocation; results.push({ personId, personName, personLocation, weightedPegsReceived: validPegsTotal - penaltyPegsGiven.length, validPegsReceived, penaltyPegsGiven }); } }); return results.sort((a, b) => a.weightedPegsReceived - b.weightedPegsReceived); } } exports.DefaultResultsService = DefaultResultsService;