20two_may
@20two_may

Не работает функция с просмотром всех пользователей сервера. В чем проблема?

Всем привет. Вообщем нужно вывести никнейм каждого юзера на сервере в консоль.
Я использую данный цикл:
@bot.event
async def on_ready():
	for guild in bot.guilds:
		for member in guild.members:
			print(member)


Но он не работает, т.е. выводит в консоль ТОЛЬКО имя бота, при этом ошибок никаких не выдает.
  • Вопрос задан
  • 134 просмотра
Решения вопроса 1
20two_may
@20two_may Автор вопроса
Вообщем я решил проблему.
Дело было в том, что Discord ввел Intents. Это радикальное изменение в том, как пишутся боты. Намерение в основном позволяет боту подписаться на определенные сегменты событий. События, соответствующие каждому намерению, документируются в отдельном атрибуте документации намерений.

Для начала вам надо:
1. Зайти в discord.com/developers
2. Выбрать свое App
3. Зайти в раздел Bot
4. Прокрутить до Privileged Gateway Intents и включить там два пункта.

После предоставления этих "разрешений" в Discord Developers, их надо также предоставить в самом коде и там-же подтвердить, в моем случае это выглядело так:
intents = discord.Intents(messages=True, guilds=True, members=True)
bot = commands.Bot(command_prefix = "-", intents=intents)

После этого у меня все прекрасно заработало.

Ну и для получения списка всех пользователей сервера я также решил использовать более новую "версию" цикла, который у меня был в самом начале. Теперь он выглядит так:
@bot.event
async def on_ready():
for member in bot.get_all_members():
		print(member)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы