Discord Бот может видеть только себя и никаких других пользователей в гильдии

#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:

  1. Включите намерение участников сервера в нижней части вкладки «Бот» вашего портала разработчиков Discord:

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

  2. Измените строку client = discord.Client() на эту:

     intents = discord.Intents.default()
    intents.members = True
    client = discord.Client(intents=intents)
      

    Это заставляет вашего бота запрашивать намерение шлюза «участники».


Каковы намерения шлюза?Намерения позволяют подписаться на определенные события. Например, если вы установите intents.typing = False , что ваш бот не будет отправлять события ввода, которые могут сэкономить ресурсы.

Привилегированные Что такое привилегированные намерения?намерения (например, участники и присутствия) считаются конфиденциальными и требуют проверки Discord для ботов на более чем 100 серверах. Для ботов, которые находятся менее чем на 100 серверах, вам просто нужно зарегистрироваться на странице, показанной выше.

Руководство по намерениям шлюза

Ссылка на Intents API

Ответ №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.