Tengo todos los datos que necesito en la base de datos mongoDB, simplemente no sé cómo puedo enviar partes de los datos en una inserción de Discord. por ejemplo los datos:
new birthdaySchema({ User: username.username, Birthday: birthdayString, Month: showMonth, Day: showDay, Year: showYearAño, Mes y Día están ahí para ordenar los cumpleaños y cadena de cumpleaños = Día del Mes
También uso momento-zona horaria (UTC)
const dateTime = moment.utc().format(`DD MM YYYY, hh:mm:ss`);Mi objetivo es con una barra diagonal como /next-birthdays, los datos en la inserción deberían verse así
${birthdayString} ${Year}\n${User} (y esto 10 veces, por lo que los próximos cumpleaños de 10 usuarios)
Y si el cumpleaños y la fecha y hora reales de las zonas horarias de momento (UTC) coinciden. Luego, el Bot debe hacer una nueva inserción con un título (Feliz cumpleaños) y en la descripción ( Today is ${User}'s Birthday, blah blah blah ) y, por último, debe otorgarle a ese usuario el rol de cumpleaños en este servidor.
Espero que alguien pueda ayudarme :)
Tengo algo similar a lo que podría ayudarte :) Esto se logra mediante el uso de la biblioteca mongoose (que supongo que probablemente estés usando).
En mi código tengo una referencia al archivo JS donde se encuentra mi esquema:
const Messages = require("../models/benSchema2");Luego, podría tener una variable y almacenar todas las entradas de la base de datos dentro de ella en forma de matriz, como esta:
const messageOrdered = await Messages.find({}).sort({ messages: -1 });(En mi caso, obtengo todas las entradas de la base de datos, clasificándolas por orden descendente de mensajes. ¿Tal vez podría ordenarlas según la cadena de cumpleaños?)
Luego puede tener un ciclo for, comenzando en i=0 y deteniéndose en 9, que debería tener los 10 cumpleaños más cercanos. Tengo mi código aquí, pero podría refactorizarse para que sea más eficiente. Además, mi código funciona en función de los datos de ID de usuario almacenados en la base de datos, pero debería poder funcionar refinándolo para que funcione con nombres de usuario.
let content = ""; for (let i = 0; i < messageOrdered.length; i++) { if (i === 5) { break; } const userID = await client.users.fetch(messageOrdered[i].UserID); let user = userID.username; if (i === 0) { content += `🥇 ${i + 1}: ${user} - ${messageOrdered[i].messages}\n`; } else if (i === 1) { content += `🥈 ${i + 1}: ${user} - ${messageOrdered[i].messages}\n`; } else if (i === 2) { content += `🥉 ${i + 1}: ${user} - ${messageOrdered[i].messages}\n`; } else { content += `🎖️ ${i + 1}: ${user} - ${messageOrdered[i].messages}\n`; } } (bit spaghetti code but oh well :))Una vez que obtenga los 10 más cercanos y todos se agreguen a la cadena de contenido, en su MessageEmbed final puede hacer:
.addField("Global Positions (Text):", content)Entonces finalmente envíelo. Espero que esto haya ayudado de alguna manera :)