Discord.py — Ответить на DM с определенным сообщением

#python #python-3.x #discord #discord.py #discord.py-rewrite

#python #python-3.x #Discord #discord.py

Вопрос:

пытаюсь заставить моего бота отвечать на DMS «это dm», но безуспешно, вот мой код:

 @client.event
async def on_message(message):
    if message.guild == null:
        await message.channel.send('this is a dm')
    else:
        pass
  

Я также пытался использовать это:

 @client.event
async def on_message(message):
    if isinstance(message.channel, discord.channel.DMChannel):
        await ctx.send('This is a DM')
  

В этом последнем я получаю ошибку из-за контекста (ctx)

Ответ №1:

Первый отправленный вами код использует null , чего даже нет в python. Второе немного ненужно, используйте это вместо:

 @client.event
async def on_message(message):
    if not message.guild:
        await message.channel.send('this is a dm')
  

Ответ №2:

Я знаю, что это довольно поздний ответ, но мне действительно нужно указать на это.

Я бы рекомендовал использовать этот код, поскольку в противном случае он мог бы продолжать отвечать на свои собственные сообщения, и вы получили бы цикл ответов. Этот код также выдает ошибку, если у пользователя отключены личные DM.

 @client.event()
async def on_message(message):
    if message.author == client.user:
        return
    if not message.guild:
        try:
            await message.channel.send("This is a DM.")
        except discord.errors.Forbidden:
            pass
    else:
        pass
  

Ответ №3:

Попробуйте это:

 import discord

client = discord.Client()

@client.event
async def on_message(message):
    if isinstance(message.channel, discord.channel.DMChannel) and message.author != client.user:
        await message.channel.send('This is a DM')

client.run("KEY")