You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

discord.py中guild.members仅返回机器人自身无法获取全部服务器成员如何解决

问题原因

Discord API v8及更高版本引入了特权网关意图限制,读取服务器成员列表所需的Server Members Intent属于特权权限,默认处于关闭状态;同时你的代码初始化客户端时未显式声明启用成员相关意图,因此接口仅能返回机器人自身的成员信息。另外你代码中继承的discord.client拼写错误,正确类名首字母需大写为discord.Client,否则会直接触发类不存在的报错。

修复步骤
  • 第一步:开启开发者后台特权权限
    打开Discord开发者平台,进入你当前机器人对应的应用设置页,切换到「Bot」选项卡,下拉找到「Privileged Gateway Intents」区域,打开Server Members Intent的开关即可。如果你的机器人需要读取用户发送的消息内容,也可以同步开启Message Content Intent开关。
  • 第二步:修改代码显式声明启用意图
    初始化客户端前先构造意图对象,开启成员读取权限,初始化时将意图对象传入客户端,修改后的完整代码示例如下:
import discord

# 构造意图对象,默认启用基础通用意图
intents = discord.Intents.default()
# 显式开启成员读取权限
intents.members = True
# 若需要读取消息内容可以额外加以下配置
# intents.message_content = True

class MyClient(discord.Client):
    async def on_ready(self):
        print("The bot is ready!")
        # 此处测试打印已加入服务器的全部成员
        for guild in self.guilds:
            print(f"服务器 {guild.name} 成员列表:")
            for member in guild.members:
                print(member.name)

    async def on_message(self, message):
        if message.content.startswith("<你的命令名称>"):
            # 你的命令逻辑
            pass

        if message.content.startswith("<你的命令名称>"):
            # 你的命令逻辑
            pass

    async def <事件名>(self, <参数>):
        # 你的事件逻辑
        pass

# 初始化时传入意图对象
client = MyClient(intents=intents)
client.run("<你的机器人token>")

内容的提问来源于stack exchange,提问作者Hobbes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 05:36:07