discord.py Bot nie reaguje na dane wejściowe w czatach

Dec 23 2020

Co próbuję zrobić : aby otrzymać odpowiedź od autora wiadomości w ich DM z botem.

Mój problem : Bot nie odpowiada, gdy wiadomość jest wysyłana do niego w DM, tak jak tego oczekuję. Brak komunikatów o błędach.

Kod :

@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

Obrazy :

(Powyższy obrazek) Brak odpowiedzi pomimo spełnienia podanych warunków.

Referencje / inne pytania, do których się odniosłem :

  • Discord.py Sprawdź, czy kanał jest DM
  • discord.DMChannel API Reference
  • Discord.py - Odpowiedz na DM, podając konkretną wiadomość
  • Discord.py bot: jak mam sprawić, by mój discord bot wysyłał mi odpowiedzi na polecenie, którego użytkownicy używają w DM, np. Do ankiety?

Odpowiedzi

1 NuKeFluffy Dec 23 2020 at 09:49

Wystąpił problem z czekiem, jeśli wydrukujesz message.channel, otrzymasz:

Direct Message with username#1234

A jeśli wydrukujesz discord.channel.DMChannel, otrzymasz:

<class 'discord.channel.DMChannel'>

Zauważysz, że są to dwie różne rzeczy, zmiana czeku na to powinna rozwiązać problem:

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