Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

278
Visualizações
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 por lo que 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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda