discord.py Bot no responde a la entrada en DMs

Dec 23 2020

Lo que intento hacer : recibir una respuesta del autor del mensaje en sus mensajes directos con el bot.

Mi problema : el bot no responde cuando se le envía un mensaje en los DM como esperaba. No hay mensajes de error.

Codigo :

@client.command()
async def test(ctx):
    await ctx.send("Sending a dm now")
    def check(message):
        return message.author == ctx.author and message.channel == discord.channel.DMChannel
    try:
        await ctx.author.send("Say test: ")
        response = await client.wait_for('message', check=check)
        if response.content.lower() == 'test':
            await ctx.send("Test successful")
        elif response.content.lower() == 'banana':
            await ctx.author.send("That works too")
    except:
        # do things here

Imágenes :

(Imagen superior) No se da ninguna respuesta a pesar de que se cumplen las condiciones dadas.

Referencias / Otras preguntas a las que me he referido :

  • Discord.py Comprueba si el canal es un DM
  • Discord.DMChannel API Reference
  • Discord.py - Responder a DM con un mensaje específico
  • Bot de Discord.py: ¿cómo puedo hacer que mi bot de discord me envíe respuestas a un comando que los usuarios usan en DM, por ejemplo, para una encuesta?

Respuestas

1 NuKeFluffy Dec 23 2020 at 09:49

Hay un problema con su cheque, si imprime message.channelobtendrá:

Direct Message with username#1234

Y si imprime discord.channel.DMChannelobtendrá:

<class 'discord.channel.DMChannel'>

Notará que son dos cosas diferentes, cambiar su cheque a esto debería solucionar el problema:

def check(message):
    return message.author == ctx.author and str(message.channel.type) == "private"