es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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));
};
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El mensaje de error “member.send no es una función” indica que el objeto member que se pasa al bucle forEach no tiene un método send, lo que significa que no es un objeto User.

    Para solucionar este problema, asegúrate de iterar solo sobre objetos User, no sobre objetos GuildMember. Puedes hacer esto utilizando el método cache.filter para seleccionar solo usuarios del caché de miembros, de la siguiente manera:

    if (command === 'dmall') {
      message.guild.members.cache.filter(member => !member.user.bot)
        .forEach(async (member) => {
          const messageSent = await member.send(args[0]);
          console.log(messageSent);
          await wait(5000);
        });
    }
    

    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.

Comments are closed.