#python #python-3.x #pycharm #discord #discord.py
#python #python-3.x #pycharm #Discord #discord.py
Вопрос:
Я недавно следовал этому руководству, чтобы начать работу с API Discord. К сожалению, когда я получил часть о печати всех пользователей в гильдии, я уперся в стену.
Когда я пытаюсь напечатать имена всех пользователей, он печатает только имя бота и ничего больше. Для справки, всего в гильдии шесть пользователей. У бота есть права администратора.
import os
import discord
TOKEN = os.environ.get('TOKEN')
client = discord.Client()
@client.event
async def on_ready():
for guild in client.guilds:
print(guild, [member.name for member in guild.members])
client.run(TOKEN)
Ответ №1:
-
Включите намерение участников сервера в нижней части вкладки «Бот» вашего портала разработчиков Discord:
-
Измените строку
client = discord.Client()
на эту:intents = discord.Intents.default() intents.members = True client = discord.Client(intents=intents)
Это заставляет вашего бота запрашивать намерение шлюза «участники».
Каковы намерения шлюза?Намерения позволяют подписаться на определенные события. Например, если вы установите intents.typing = False
, что ваш бот не будет отправлять события ввода, которые могут сэкономить ресурсы.
Привилегированные Что такое привилегированные намерения?намерения (например, участники и присутствия) считаются конфиденциальными и требуют проверки Discord для ботов на более чем 100 серверах. Для ботов, которые находятся менее чем на 100 серверах, вам просто нужно зарегистрироваться на странице, показанной выше.
Ответ №2:
По состоянию на discord.py версии v1.5.0, которые вы должны использовать Intents
для своего бота, вы можете узнать о них больше, нажав здесь Другими словами, вам нужно внести следующие изменения в свой код —
import discord
from dotenv import load_dotenv
load_dotenv()
TOKEN = os.getenv('DISCORD_TOKEN')
GUILD = os.getenv('DISCORD_GUILD')
intents = discord.Intents.all()
client = discord.Client(intents=intents)
@client.event
async def on_ready():
for guild in client.guilds:
if guild.name == GUILD:
break
print(
f'{client.user} is connected to the following guild: n'
f'{guild.name} (id: {guild.id})'
)
# just trying to debug here
for guild in client.guilds:
for member in guild.members:
print(member.name, ' ')
members = 'n - '.join([member.name for member in guild.members])
print(f'Guild Members:n - {members}')
client.run(TOKEN)
Комментарии:
1. Спасибо! В большинстве других ответов не упоминалось, что вы должны были сделать
client = discord.Client(intents=intents)
Спасибо!2. Я сталкиваюсь с такой же проблемой в nodejs. Не могли бы вы, пожалуйста, дать решение и в nodejs.