Hola, estoy tratando de eliminar mensajes que tienen 7 días. Estoy usando cron para programar cuándo debería suceder esto. Aquí, en mi código, intento obtener mensajes de un canal llamado log_channel y luego comparo las marcas de tiempo de los mensajes con const days = moment().add(7, 'd'); Sin embargo, estoy atascado en la declaración if (msgs - days) ya que esto no parece devolver nada.
Aquí está mi código de referencia:
const cron = require('node-cron'); const moment = require('moment'); module.exports = new Event("ready", client => { try{ const log_channel = client.channels.cache.find(c => c.name == "log") cron.schedule("0 18 22 * * *", function(){ console.log("Attempting to purge log messages..."); const days = moment().add(7, 'd'); // use moment the set how many days to compare timestamps with // log_channel.messages.fetch({ limit: 100 }).then(messages => { const msgs = Date.now(messages.createdTimestamp) if (msgs < days){ log_channel.bulkDelete(100) console.log("messages deleted") } }) })En primer lugar, noté que su función no era una función asíncrona. Necesitamos usar una función asíncrona porque usaremos un comportamiento asíncrono basado en promesas en su código. log_channel.messages.fetch debe await log_channel.messages.fetch De acuerdo con los documentos Message#fetch() El método fetch() en este caso simplemente devuelve un objeto de mensaje asíncrono. Promesa.
La siguiente parte es que te perdiste ForEach() , forEach() ejecuta la función callbackFn una vez para cada elemento de la matriz.
Finalmente, también está comparando la marca de tiempo (un copo de nieve) con un objeto de momento que no funcionará y la razón por la que if no es verdadero. Si desea recibir mensajes 7 días antes, puede hacer algo como este moment.utc(msg.createdTimestamp).add( -7, 'd') esto devolverá todas las marcas de tiempo 7 días antes de los últimos 100 mensajes. Tenga en cuenta que Discord API lo limita a 14 días, así que téngalo en cuenta.
cron.schedule("* 18 22 * * *", async function(){ console.log("Attempting to purge mod log messages..."); await log_channel.messages.fetch({ limit: 100 }) .then(messages => { messages.forEach(msg => { const timestamp = moment.utc(msg.createdTimestamp).add( -7, 'd'); if (timestamp) { log_channel.bulkDelete(5); } else { return; } })