discord.pyボットはDMへの入力に応答しません

Dec 23 2020

私がやろうとしていること:ボットを使用したDMでメッセージ作成者からの応答を受信するため。

私の問題:ボットは、DMでメッセージが送信されたときに、期待どおりに応答しません。エラーメッセージはありません。

コード

@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

画像

(上の画像)所定の条件が満たされているにもかかわらず、応答がありません。

参考文献/私が参照したその他の質問

  • Discord.pyチャンネルがDMかどうかを確認する
  • discord.DMChannelAPIリファレンス
  • Discord.py-特定のメッセージでDMに返信する
  • Discord.pyボット:ユーザーがDMで使用するコマンド(調査など)への応答をDiscordボットに送信させるにはどうすればよいですか?

回答

1 NuKeFluffy Dec 23 2020 at 09:49

小切手に問題があります。印刷message.channelすると、次のようになります。

Direct Message with username#1234

そして、あなたが印刷discord.channel.DMChannelするならば、あなたは得るでしょう:

<class 'discord.channel.DMChannel'>

これらは2つの異なるものであることに気付くでしょう。チェックをこれに変更すると、問題が解決するはずです。

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