bot.get_user(id) стал возвращать "None". Раньше все работало
Буквально 2 недели назад, данный ниже код работал. То есть, я пишу в чат "!status id_пользователя", а затем, бот возвращает в консоль его ник и тег в формате "имя_пользователя#0000".
Сейчас, при запуске этого же кода, какой id я не укажу, бот всегда возвращает None в консоль. При этом не поменялось ничего вообще, пользователи не меняли ник (хоть от этого и не зависит id) и уж тем более не удаляли свой аккаунт. В чем может быть проблема?
@bot.command()
async def status(ctx, arg):
user = bot.get_user(int(arg))
print(user)
Ответы (1 шт):
Итак, более-менее разобравшись в проблеме готов помочь тем, кто столкнулся или еще столкнется с подобной проблемой в дискорде. А таких будет много :)
Причина по которой произошел сбой в работе моего кода:
Шлюз был обновлен несколько дней назад и теперь вам нужно добавлять намерения для работы бота
Грубо говоря, вышло обновление, немного изменившее принцип работы дискорд-бота.
Как устранить проблему:
Поняв, что проблема определенно не в коде, обратился в поддержку дискорда: моя заявка. Там мне сообщили, что для восстановления работы бота я должен выдать ему необходимые намерения. Какие конкретно нужны, я еще не разобрался, поэтому пока что выдал вообще все. Делается это так:
Обновляем библиотеку: pip install --upgrade discord.py
# объявляем намерения. all() означает, что выдаем все
intents = discord.Intents.all()
# при определении бота и его префикса, определяем также намерения
bot = commands.Bot(command_prefix='!', intents=intents)
Дополнительно:
Подробнее об это можно почитать здесь. Данную ссылку мне дали в поддержке. Всем удачи, надеюсь не придется искать решение проблемы также долго как мне :)
Также можно оформить данный код так, чтобы он работал без выдачи намерений. Вместо get_user() использовать await fetch_user().
@bot.command()
async def status(ctx, arg):
user = await bot.fetch_user(int(arg))
print(user)