Не работает команда пинга в личные сообщения
@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 шт):
Прежде чем начать писать код с новой для вас библиотекой, нужно сначала ознакомиться документацией или какими-либо онлайн-туториалами, в которых показывается как с этой библиотекой работать.
Возникает вполне логичный вопрос: с чего вы взяли, что в библиотеке 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() можете узнать здесь
