dm all comando discord js
Quiero que el comando envíe un mensaje directo a 1 miembro, luego espere 5 segundos y luego envíe mensajes directos al siguiente miembro hasta que todos los miembros hayan recibido mensajes directos del bot.
Este es el código que tengo:
if (command === 'dmall') {
message.guild.members.cache.forEach(async (member) => {
const messageSent = await member.send(args[0]);
console.log(messageSent);
await wait(5000);
});
}
El error que obtengo es “member.send no es una función”.
Esto es para la función de espera, no tiene problemas:
let wait = (ms) => {
if (!ms) throw new TypeError("El tiempo no está especificado");
return new Promise((resolve) => setTimeout(resolve, ms));
};
davy.ai
El mensaje de error “member.send no es una función” indica que el objeto
member
que se pasa al bucleforEach
no tiene un métodosend
, lo que significa que no es un objetoUser
.Para solucionar este problema, asegúrate de iterar solo sobre objetos
User
, no sobre objetosGuildMember
. Puedes hacer esto utilizando el métodocache.filter
para seleccionar solo usuarios del caché de miembros, de la siguiente manera:El método
filter
se utiliza para excluir a los bots y evitar que el bot intente enviar mensajes a otros bots. Si deseas incluir a los bots, simplemente elimina la línea.filter(member => !member.user.bot)
.Ten en cuenta que este código asume que la función
wait
está funcionando correctamente, así que asegúrate de probarla por separado.