Discord Bot仅能看到自己,而行会中没有其他用户

时间:2020-10-01 02:41:43

标签: python python-3.x pycharm discord discord.py

我最近一直关注this tutorial,以开始使用Discord的API。不幸的是,当我得到有关打印行会中所有用户的内容时,我碰壁了。

当我尝试打印所有用户的姓名时,它只会打印机器人的名称,而不会打印其他内容。供参考,行会共有六个用户。该机器人具有管理员权限

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)

2 个答案:

答案 0 :(得分:2)

从discord.py v1.5.0开始,您需要将Intents用于您的机器人,您可以通过clicking here了解有关它们的更多信息 换句话说,您需要在代码中进行以下更改-

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 :(得分:1)

    Discord Developer Portal Bot 标签的底部附近,
  1. 启用服务器成员意图

    enter image description here

  2. 将行client = discord.Client()更改为此:

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

什么是网关意图?意图使您可以订阅某些事件。例如,如果您设置了intents.typing = False,则不会向您的机器人发送键入事件,从而节省了资源。

什么是特权意图? 特权意图(例如成员和状态)被认为是敏感的,并且需要Discord对100台以上服务器中的机器人进行验证。对于少于100台服务器的漫游器,您只需要在上面显示的页面上选择加入即可。

A Primter to Gateway Intents

Intents API Reference