Soy nuevo en discord js y trato de hacer que mi bot envíe un mensaje en un momento específico (establecido a través de la marca de tiempo).
client.on('ready', function(e) { console.log(`Logged in as ${client.user.tag}!`) let scheduledMessage = new cron.CronJob('0 10 15 * * *', () => { const guild = client.guilds.cache.get('ID'); const channel = client.channels.cache.get('ID'); const exampleEmbed = new MessageEmbed() .setColor('#ebdc05') .setTitle('Another ten minutes') channel.send({ embeds: [exampleEmbed] }); }); scheduledMessage.start() });Encontré este método que envía un mensaje a las 15:10:00. Mi problema es que necesitaría que el bot enviara el mensaje cada 31 horas.
También encontré el método para escribir '0 0 */31 * * *' en lugar de '0 10 15 * * *'. Y eso funciona, cada 31 horas se enviaría un mensaje, pero me temo que mi bot a veces puede enviar el mensaje un poco después de la marca de las 31 horas y simplemente sumar segundos y minutos tras el tiempo, que en algún momento envía el mensaje a las 15:12:00 o algo así.
Así que se me ocurrió la idea de simplemente hacer una marca de tiempo y agregar la hora para tener siempre las 31 horas, luego dejar que el bot envíe el mensaje en la marca de tiempo exacta. Lamentablemente, no encontré nada a ese problema.
¿Es eso posible?
Editar: la variante de marca de tiempo sería útil porque puedo restar y agregar tiempo muy fácilmente y también mostrarlo en una inserción.
El objetivo de la biblioteca cron que está utilizando es que puede decirle explícitamente los minutos y segundos, en su caso, 0.
No acumulará errores. A menos que esté muy rota, la biblioteca cron hará las cosas de "averiguar la próxima marca de tiempo" por usted.
La cadena cron 0 0 */31 * * * significa "Cada 31 horas, cuando la hora parece XX:00:00". Por lo tanto, nunca se ejecutará a las 15:12:00 oa las 15:10:00. Has dicho "corre en este minuto y segundo exactos", así que lo hará.
Descargo de responsabilidad: intenté leer el código de https://github.com/kelektiv/node-cron para confirmarlo yo mismo, pero es bastante complicado. https://github.com/node-cron/node-cron/tree/master/src fue más fácil de leer y definitivamente verifica la marca de tiempo cada segundo.