首页 > 解决方案 > 检索频道 discord.py 中的成员列表 rewrite

问题描述

概括

我对 discord.py 真的很陌生,并且正在尝试弄清楚如何在 discord 服务器频道中检索人员列表。我正在研究一个将频道随机分成两个不同呼叫的命令,但我想知道如何在语音频道中检索成员,创建成员列表,随机拆分它们,最后移动成员。

我现在主要关心的只是将成员列表检索为列表 [] 格式


这是我到目前为止所拥有的:

async def team(ctx):
    team_select = [discord.VoiceChannel.members(ctx.guild.channels, id=742871631751282829)]
    print(team_select)

^ 这段代码,我用来给我错误:“TypeError:'property' object is not callable”

标签: pythondiscord.pydiscord.py-rewrite

解决方案


您可以通过 来做到这一点VoiceChannel.members,但有些事情应该从Abdulaziz的答案中改变。

1.使用Bot.get_channel()

  • 如果bot.get_channel您有频道的 ID,或者Guild.get_channel如果您知道频道在哪个公会并且有其 ID,utils.get则应仅在您没有 ID 时调用。

  • get_ 方法是 O(1),而 utils.get 在内部是一个 for 循环,因此是 O(n)。

  • 如果您不熟悉大 O 表示法,O(1) 表示操作时间与任意数量的项目相同,而 O(n) 是线性的,项目越多,所需时间越长。

  • 阅读更多关于O(n) vs O(1) 这里

2.使用Bot.get_guild()

  • fetch_guild是一个 API 调用,并且可以在不是 API 调用时让您的机器人速率受限get_guild

  • 使用返回的 Guild 对象fetch_guild不会给你公会的频道。

  • 在此处的文档中阅读有关它的更多信息。

这是修改后的代码:

@bot.command()
async def team(ctx):
    vc = ctx.guild.get_channel(742871631751282829)
    await ctx.send("\n".join([str(i) for i in vc.members]))

推荐阅读