-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
96 lines (74 loc) · 3.42 KB
/
index.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
86
87
88
89
90
91
92
93
94
95
96
import axios from 'axios';
import wa from '@open-wa/wa-automate';
import { config } from 'dotenv';
config();
/**
* URL de la API de frases, que devuelve un objeto con la frase del día en español y su autor.
*
* La API recoge la frase diaria de la página https://proverbia.net que parece ser de libre acceso y hosteada por alguien privado,
* pero no he encontrado nada que lo confirme. En cualquier caso, la API no es mía y funciona al día de hoy (2024-01-15).
* @type {string}
*
* @see https://proverbia.net/
* @see https://frasedeldia.azurewebsites.net/api/phrase
*
* @example
* Ejemplo de respuesta:
*
* {
* "phrase": "El éxito es la capacidad de ir de fracaso en fracaso sin perder el entusiasmo.",
* "author": "Winston Churchill",
* }
*
*/
const urlApiFraseDiaria = 'https://frasedeldia.azurewebsites.net/api/phrase';
async function getFraseDiaria() {
let fraseDiaria = await axios.get(urlApiFraseDiaria);
return fraseDiaria.data;
}
// Iniciar sesión en WhatsApp Web
wa.create(undefined, undefined, { refreshQR: 60000 }).then(client => {
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
async function esperarHoraEnvio() {
let horaEnvio = parseInt(process.env.HORA_ENVIO);
let minutosEnvio = parseInt(process.env.MINUTOS_ENVIO);
// Esperar a la hora de envío
let horaActual = new Date().getHours();
let minutosActuales = new Date().getMinutes();
let horaEspera = horaEnvio - horaActual;
let minutosEspera = minutosEnvio - minutosActuales;
if (minutosEspera < 0) {
horaEspera--;
minutosEspera = 60 + minutosEspera;
}
if (horaEspera < 0) {
horaEspera = 24 + horaEspera;
}
let tiempoEspera = (horaEspera * 60 * 60 * 1000) + (minutosEspera * 60 * 1000);
console.log(`Esperando ${horaEspera} horas y ${minutosEspera} minutos para enviar la frase diaria`);
await sleep(tiempoEspera);
}
async function enviarFraseDiaria(chatId) {
// Esperar a la hora de envío
await esperarHoraEnvio();
let fraseDiaria = await getFraseDiaria();
let frase = fraseDiaria.phrase;
let autor = fraseDiaria.author;
let mensaje = `${frase}\n - ${autor}`;
await client.sendText(chatId, mensaje);
console.log(`Frase diaria enviada a las ${new Date().toLocaleTimeString()}`);
// Esperar 2 minutos para evitar que se envíen mensajes duplicados
await sleep(1000 * 60 * 2);
enviarFraseDiaria(chatId);
}
// Generar ChatId de la conversación con el número de contacto
// Para contactos es el número y termina en @c.us
// Para grupos termina en @g.us, pero el ID probablemente
// esta generado por WhatsApp
client.getChatById(`${process.env.NUMERO_CONTACTO}@c.us`).then(chat => {
client.sendText(chat.contact.id, `Me he iniciado correctamente, esperando a la hora de envío, que es a las ${process.env.HORA_ENVIO}:${process.env.MINUTOS_ENVIO}, puedes borrar este mensaje`);
enviarFraseDiaria(chat.contact.id);
});
});