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可能仅包含机器人自身或少量成员。如需获取完整成员列表,需做以下操作:
- 启动机器人时开启成员缓存权限:
intents = discord.Intents.default() intents.members = True bot = commands.Bot(command_prefix="!", intents=intents)
- 或使用异步方法主动拉取成员(适合大服务器,避免缓存占用过多资源):
# 异步获取服务器所有成员 async for member in guild.fetch_members(limit=None): print(member.name)
内容的提问来源于stack exchange,提问作者Rishit Chaudhary
相关产品推荐
相关产品推荐

