Не работает команда пинга в личные сообщения

@bot.command(pass_context=True)
async def dm(ctx):
    user=await bot.get_user_info("698222023381483572")
    await bot.send_message(user, "Your message goes here")


выдает в консоли:

Traceback (most recent call last):
  File "C:\Users\Home\AppData\Local\Programs\Python\Python39\lib\site-packages\discord\ext\commands\core.py", line 85, in wrapped
    ret = await coro(*args, **kwargs)
  File "C:\pybot\bot.py", line 140, in dm
    user=await bot.get_user_info("698222023381483572")
AttributeError: 'Bot' object has no attribute 'get_user_info'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "C:\Users\Home\AppData\Local\Programs\Python\Python39\lib\site-packages\discord\ext\commands\bot.py", line 939, in invoke
    await ctx.command.invoke(ctx)
  File "C:\Users\Home\AppData\Local\Programs\Python\Python39\lib\site-packages\discord\ext\commands\core.py", line 863, in invoke
    await injected(*ctx.args, **ctx.kwargs)
  File "C:\Users\Home\AppData\Local\Programs\Python\Python39\lib\site-packages\discord\ext\commands\core.py", line 94, in wrapped
    raise CommandInvokeError(exc) from exc
discord.ext.commands.errors.CommandInvokeError: Command raised an exception: AttributeError: 'Bot' object has no attribute 'get_user_info'

Ответы (1 шт):

Автор решения: denisnumb

Прежде чем начать писать код с новой для вас библиотекой, нужно сначала ознакомиться документацией или какими-либо онлайн-туториалами, в которых показывается как с этой библиотекой работать.

Возникает вполне логичный вопрос: с чего вы взяли, что в библиотеке discord-py объект commands.Bot имеет функцию get_user_info(), а также send_message()?


Если почитать документацию по вашему объекту bot, то можно увидеть, что в списке методов у него есть асинхронный метод fetch_user(), который принимает в качестве аргумента id не в виде строки, как у вас, а в виде целого числа int

введите сюда описание изображения

И в случае успеха возвращает вам объект пользователя, свойства и методы которого вы тоже можете найти в документации: discord.User


И теперь, посмотрев список методов пользователя, можно обнаружить, что для отправки сообщения этому пользователю, вызывать функцию send() (а не send_message()) нужно именно у пользователя или канала, в который вы хотите отправить сообщения, а не у объекта bot.


Научитесь пользоваться документацией и от подобных проблем можно будет избавляться за пару минут, просто почитав об этом, вместо того, чтобы ждать, пока вам через пару часов ответят другие люди :)

Краткое руководство есть у меня на GitHub: ссылка

Код должен выглядеть так:

# для использования await bot.fetch_user(), боту нужно выдать намерения
bot = commands.Bot(command_prefix='!', intents=discord.Intents.all())

@bot.command()
async def dm(ctx):
    user = await bot.fetch_user(698222023381483572)
    await user.send("Your message goes here")

По поводу intents, для использования await bot.fetch_user() можете узнать здесь

→ Ссылка