discord.py Bot ne répond pas aux entrées dans les DM

Dec 23 2020

Ce que j'essaie de faire : recevoir une réponse de l'auteur du message dans ses DM avec le bot.

Mon problème : Bot ne répond pas lorsque le message lui est envoyé dans les DM comme je m'y attendais. Il n'y a aucun message d'erreur.

Code :

@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

Images :

(Image ci-dessus) Aucune réponse n'est donnée malgré le respect des conditions données.

Références / autres questions auxquelles j'ai fait référence :

  • Discord.py Vérifier si Channel est un DM
  • Informations de référence sur l'API discord.DMChannel
  • Discord.py - Répondre au DM avec un message spécifique
  • Discord.py bot: comment puis-je faire en sorte que mon robot discord m'envoie des réponses à une commande que les utilisateurs utilisent dans les DM, par exemple pour une enquête?

Réponses

1 NuKeFluffy Dec 23 2020 at 09:49

Il y a un problème avec votre chèque, si vous imprimez, message.channelvous obtiendrez:

Direct Message with username#1234

Et si vous imprimez, discord.channel.DMChannelvous obtiendrez:

<class 'discord.channel.DMChannel'>

Vous remarquerez qu'il s'agit de deux choses différentes, changer votre chèque pour cela devrait résoudre le problème:

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