Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

214
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!