-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathferiado-bot.js
72 lines (56 loc) · 2.2 KB
/
feriado-bot.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
/**
* Autor: Lucas Laborne
* Descrição: Módulo para obter a lista de feriados, calcular
* a quantidade de dias e calcular o(s) próximo(s) feriado(s).
*/
const moment = require('moment');
const fs = require('fs');
moment.locale('pt-BR');
// Obtem uma lista ordenada com os próximos feriados
function getFeriados() {
let feriados = JSON.parse(fs.readFileSync('./assets/feriados.json'));
const hoje = moment().subtract(3, 'hours');
// Remove as datas que já passaram:
const formato = 'DD-MM-YYYY';
feriados = feriados.filter(item => (moment(item.data, formato) - hoje) > 0);
// Ordena os feriados:
feriados = feriados.sort((a, b) => moment(a.data, formato) - moment(b.data, formato));
feriados.forEach(f => {
const data = moment(f.data, formato);
f.diaSemana = data.format('dddd');
f.faltam = data.diff(hoje, 'days') + 1;
f.isDiaUtil = !(f.diaSemana === 'Sábado' || f.diaSemana === 'Domingo');
});
return feriados;
}
// Responde quando será o próximo feriado
function proximoFeriado() {
// Obtem um array json com os proximos feriados
let feriados = getFeriados();
// Se não houver mais feriados:
if (!feriados)
return 'Não há mais feriados este ano :(';
// Obtem o próximo feriado:
const prox = feriados[0];
// Monta a resposta formatada:
let str = '';
const d = new Date();
// Easter egg(s):
if (d.getDate() === 31 && d.getMonth() + 1 === 10 && d.getFullYear() === 2019)
str += `<code>\u{1F383}\u{1F47B}\u{1F383} ${prox.nome} \u{1F383}\u{1F47B}\u{1F383}</code>\n`;
else
str += `<code>${prox.nome}</code>\n`;
str += (`<i>${prox.tipo} (${prox.data})</i>\n`);
str += (`<b>${prox.diaSemana}</b>\n`);
str += (`<b>Falta(m) ${prox.faltam} dia(s)</b>\n`);
// Se cair no sabado, obtem e exibe o proximo feriado em dia util:
if (!prox.isDiaUtil) {
feriados = feriados.filter((val) => val.isDiaUtil);
if (feriados.length) {
str += (`\nO próximo feriado em dia útil é daqui a ${feriados[0].faltam} dia(s), e cai na ${feriados[0].diaSemana}`);
}
}
return str;
}
// Exports:
module.exports = { getFeriados, proximoFeriado };