如何使用新的 discord.py 版本获取不和谐服务器中所有成员的列表?
Posted
技术标签:
【中文标题】如何使用新的 discord.py 版本获取不和谐服务器中所有成员的列表?【英文标题】:How do I get a list of all members in a discord server using the new discord.py version? 【发布时间】:2019-10-24 11:06:24 【问题描述】:我最近更新了我的 discord.py,但我的一些旧命令似乎是错误的。我需要遍历不和谐服务器的所有成员,但是我这样做的旧方法不再起作用。这是我的旧代码。
@bot.command(pass_context = True)
async def missing(ctx, channel : str = None, useDiscordID : bool = False):
memberlist = []
for member in message.server.members:
toAppend = ''
if "barcode" in [y.name.lower() for y in member.roles]:
if member.nick is None:
toAppend = member.name
else:
toAppend = member.nick
if useDiscordID:
toAppend = f'str(member) : toAppend'
memberlist.append(toAppend)
这是代码中不起作用的部分,我不知道循环服务器所有成员的新方法是什么,因为 message.server.members 中的成员:不再起作用。谢谢你的帮助!
【问题讨论】:
你能发布相关异常吗? 【参考方案1】:migration guide 提到 server
已重命名为 guild
。正确的代码应该是message.guild.members
。
【讨论】:
【参考方案2】:在 sn-p 下方将返回一个生成器,其中包含客户端的每个“成员”,即您的机器人可以看到的所有服务器,该机器人是其成员。
@client.event
async def on_message(message):
if message.content.startswith('!member'):
for guild in client.guilds:
for member in guild.members:
print(member) # or do whatever you wish with the member detail
【讨论】:
没有得到完整的列表。【参考方案3】:他们对此进行了安全更新。
我引用
目前,这也需要通过开发者门户明确选择加入。 100 多个公会中的机器人需要向 Discord 申请验证。
因此,首先您需要进入您的开发者帐户并检查 Servers Member Intent 选项。
然后调用以下代码:
m2 = await g.fetch_members(limit=None).flatten()
其中 g 是上面检索到的公会对象。 上述方法只返回一个用户。
为了安全起见,我还在代码开头做了以下操作:
# these are the modules imported
from discord.ext.commands.bot import Bot
import discord
# just for reference
discord.MemberCacheFlags.all()
bot = Bot("$")
# the bots flags and the global intents flags set to True
# explicitly.
bot.intents.members=True
Intents.members=True
有趣的是,以下所有方法都不起作用,只有 api 调用为我返回超过 1 个成员。
guild.members
bot.get_all_members():
bot.users
【讨论】:
以上是关于如何使用新的 discord.py 版本获取不和谐服务器中所有成员的列表?的主要内容,如果未能解决你的问题,请参考以下文章
如何让不和谐机器人使用 discord.py 向消息添加表情符号反应?
使用 discord.py 获取不和谐服务器中所有成员的列表时出现问题
如何从不和谐中获取用户输入并将其存储为变量以在方程式中使用?不和谐.py
discord.py 你能从 discord 标签中获取用户对象吗?