如何使用discord.py获取所连接Discord服务器的成员名称
问题原因
- 你使用的discord.py 1.5及以上版本默认关闭了成员特权网关意图,没有权限拉取服务器全量成员列表
- 初始化Client时没有配置对应的成员权限,所以
guild.members仅能拿到机器人自身的缓存数据,你当前输出的{"Security"}就是机器人自己的用户名
解决步骤
- 先进入Discord开发者后台的机器人设置页面,找到Privileged Gateway Intents板块,开启
Server Members Intent开关 - 修改代码,初始化Client时显式声明启用成员意图,修改后的代码如下:
import discord import os # 声明启用默认意图+成员意图 intents = discord.Intents.default() intents.members = True client = discord.Client(intents=intents) def get_member_names(): for guild in client.guilds: for member in guild.members: yield member.name @client.event async def on_ready(): print("We have logged in as {0.user}".format(client)) people = set(get_member_names()) print(people) @client.event async def on_message(message): if message.author == client.user: return print(message.content[0] == '>') client.run(os.environ["BOT_PASSWORD"])
- 如果你的服务器成员数量超过1000,还需要主动调用
guild.chunk()拉取全量成员,可直接替换on_ready逻辑:
@client.event async def on_ready(): print("We have logged in as {0.user}".format(client)) people = set() for guild in client.guilds: # 主动拉取当前服务器全量成员数据 async for member in guild.chunk(): people.add(member.name) print(people)
内容的提问来源于stack exchange,提问作者Jivin Mazumder
相关产品推荐
相关产品推荐

