-
Notifications
You must be signed in to change notification settings - Fork 0
/
handler.js
85 lines (67 loc) 路 2.71 KB
/
handler.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
73
74
75
76
77
78
79
80
81
82
83
84
85
"use strict";
const axios = require("axios");
const { format, subDays } = require("date-fns");
const { format: formatTimeZone, utcToZonedTime } = require("date-fns-tz");
module.exports.criptoreport = async (event) => {
const TELEGRAM_TOKEN = process.env.TELEGRAM_TOKEN;
const API_KEY = process.env.API_KEY;
const CHAT_ID = process.env.CHAT_ID;
const CRIPTOS = process.env.CRIPTOS;
const actualDate = new Date();
const sevenDaysDate = subDays(actualDate, 7);
const apiDateFormatted = format(sevenDaysDate, "yyyy-MM-dd'T'HH:00:00XXX");
const API_BASE_URL = `https://api.nomics.com/v1/currencies/sparkline?key=${API_KEY}&ids=${CRIPTOS}&start=${apiDateFormatted}`;
const { data } = await axios.get(API_BASE_URL);
const content = data
.map(({ currency, prices }) => {
const [sevenDaysPrice] = prices;
const actualPrice = prices[prices.length - 1];
const oneDayPrice = prices[prices.length - 2];
const sevenDaysPercentual = (
((actualPrice - sevenDaysPrice) / sevenDaysPrice) *
100
).toFixed(2);
const oneDayPercentual = (
((actualPrice - oneDayPrice) / oneDayPrice) *
100
).toFixed(2);
const sevenDaysPriceFixed = Number(sevenDaysPrice).toFixed(2);
const oneDayPriceFixed = Number(oneDayPrice).toFixed(2);
const actualPriceFixed = Number(actualPrice).toFixed(2);
const warningEmoji =
sevenDaysPercentual <= -10 || oneDayPercentual <= -10 ? " 馃毃" : "";
const greatProfitEmoji =
sevenDaysPercentual >= 10 || oneDayPercentual >= 10 ? " 馃" : "";
const oneDayPercentageEmoji = oneDayPercentual >= 0 ? "馃搱" : "馃搲";
const sevenDayPercentageEmoji = sevenDaysPercentual >= 0 ? "馃搱" : "馃搲";
return [
`<b>${currency}${warningEmoji}${greatProfitEmoji}</b>`,
`馃挵Price: $${actualPriceFixed}`,
`${oneDayPercentageEmoji}Price<i>(1d)</i>: $${oneDayPriceFixed} <b>(${oneDayPercentual}%)</b>`,
`${sevenDayPercentageEmoji}Price<i>(7d)</i>: $${sevenDaysPriceFixed} <b>(${sevenDaysPercentual}%)</b>`,
].join("\n");
})
.join("\n\n");
const timeZone = "America/Sao_Paulo";
const actualDateFormatted = format(actualDate, "dd/MM/yyyy");
const atualHour = formatTimeZone(
utcToZonedTime(actualDate, timeZone),
"HHaaa",
{
timeZone,
}
);
const response = `<b>DAILY CRIPTOCURRENCY REPORT</b>\n${actualDateFormatted} - ${atualHour}\n\n${content}`;
const TELEGRAM_API_BASE = `https://api.telegram.org/bot${TELEGRAM_TOKEN}/sendMessage`;
await axios.post(TELEGRAM_API_BASE, {
chat_id: CHAT_ID,
text: response,
parse_mode: "html",
});
return {
statusCode: 200,
body: JSON.stringify({
response,
}),
};
};