Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

217
Vistas
Cómo comprobar si un bot puede enviar mensajes directos a un usuario

Si un usuario tiene la configuración de privacidad "Permitir mensajes directos de miembros del servidor" desactivada y un bot de Discord llama

 await user.dm_channel.send("Hello there")

Obtendrá este error:

 discord.errors.Forbidden: 403 Forbidden (error code: 50007): Cannot send messages to this user

Me gustaría comprobar si puedo enviar un mensaje a un usuario sin enviarle un mensaje. Intentar enviar un mensaje y detectar este error no funciona para mí, porque no quiero que se envíe un mensaje en caso de que el bot pueda enviar mensajes.

He intentado esto:

 print(user.dm_channel.permissions_for(bot).send_messages)

pero siempre devuelve True, incluso si el mensaje no está permitido.

También he probado esto:

 channel = await user.create_dm() if channel is None: ...

pero desafortunadamente, parece que "tiene permiso para enviar mensajes al usuario" y "tiene permiso para crear un canal dm" se consideran diferentes.

EDITAR

Para aclarar el uso exacto, ya que parece haber un poco de confusión, tome este ejemplo. Hay un servidor y 3 usuarios en cuestión: yo, mi bot y Steve. Steve tiene marcado "Permitir mensajes directos de miembros del servidor".

El bot tiene un comando llamado !newgame que acepta una lista de usuarios e inicia un juego entre ellos, lo que implica enviar DM a algunos de los miembros del juego. Debido a la configuración de privacidad de Steve, no puede jugar (ya que el bot deberá enviarle un mensaje). Si lo hago

 !newgame @DJMcMayhem @Steve

Me gustaría proporcionar una respuesta como:

 > I can't start a game with that list of users because @Steve has the wrong privacy settings.

Pero hasta donde yo sé ahora mismo, la única forma de averiguar si Steve puede jugar es intentar primero enviar un mensaje a cada usuario, lo cual me gustaría evitar.

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Explicación

Puede generar una solicitud incorrecta al dm_channel. Esto se puede lograr configurando el contenido en Ninguno, por ejemplo.

Si regresa con 400 Bad Request , puede enviarles un mensaje privado. Si regresa con 403 Forbidden , no puedes.

Código

 async def can_dm_user(user: discord.User) -> bool: ch = user.dm_channel if ch is None: ch = await user.create_dm() try: await ch.send() except discord.Forbidden: return False except discord.HTTPException: return True
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda