Discord Bot 只能看到自己,不能看到公会中的其他用户

meo*_*ich 7 python pycharm python-3.x discord discord.py

我最近一直在关注本教程以开始使用 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)
Run Code Online (Sandbox Code Playgroud)

Vid*_*ero 9

从 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)
Run Code Online (Sandbox Code Playgroud)


xjc*_*jcl 9

  1. Discord Developer PortalBot选项卡底部附近启用服务器成员意图

    在此处输入图片说明

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

    intents = discord.Intents.default()
    intents.members = True
    client = discord.Client(intents=intents)
    
    Run Code Online (Sandbox Code Playgroud)

    这使您的机器人请求“成员”网关意图。


什么是网关意图?意图允许您订阅某些事件。例如,如果你设置intents.typing = False你的机器人不会被发送可以节省资源的输入事件。

什么是特权意图? 特权意图(如成员和出席)被认为是敏感的,需要 Discord 对 100 多台服务器中的机器人进行验证。对于少于 100 个服务器的机器人,您只需要在上面显示的页面上选择加入。

网关意图入门

意图 API 参考