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

Python中discord.py返回的特殊Member列表相关疑问

关于discord.py中guild.members的问题解答

这是什么?

guild.members的类型虽显示为list,但它实际是discord.Member对象的列表。直接打印时输出的是这些对象的repr()结果(类似<Member id=123456789 name="ExampleUser" discriminator="1234">),这只是Python对对象的标识性描述字符串,并非合法的Python代码,所以粘贴到代码里会触发语法错误——它仅用于展示对象信息,不能作为可执行代码使用。

如何正确迭代?

迭代的核心是直接遍历列表里的discord.Member对象,通过访问对象属性获取所需信息(如用户名、昵称、ID等):

1. 基础for循环

# 假设已获取合法的guild对象
for member in guild.members:
    # 获取用户原始注册名称
    print(member.name)
    # 获取服务器内的自定义昵称(无昵称时返回原始名称)
    print(member.display_name)
    # 获取成员唯一ID
    print(member.id)

2. 列表推导式快速生成信息列表

如果需要一次性提取所有成员的特定信息,可使用列表推导式:

# 生成所有成员的原始名称列表
member_names = [member.name for member in guild.members]
# 生成所有成员的服务器昵称列表
display_names = [member.display_name for member in guild.members]
print(member_names)

重要注意事项

在discord.py v2.x版本中,默认不会自动缓存全部服务器成员,guild.members可能仅包含机器人自身或少量成员。如需获取完整成员列表,需做以下操作:

  1. 启动机器人时开启成员缓存权限:
intents = discord.Intents.default()
intents.members = True

bot = commands.Bot(command_prefix="!", intents=intents)
  1. 或使用异步方法主动拉取成员(适合大服务器,避免缓存占用过多资源):
# 异步获取服务器所有成员
async for member in guild.fetch_members(limit=None):
    print(member.name)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 05:20:32