显示角色成员 discord.py

Display role members discord.py

我正在尝试为 discord 机器人 (python) 编写代码,它将显示属于特定角色的成员列表。

很抱歉问了这么长的问题,我是编码的新手,在边做边学的过程中尽量做到尽可能全面。

@client.command()
async def team(ctx): # Always same role, no input needed
    guild = ctx.message.guild
    tk = guild.get_role(role_id)
    tkm = tk.members
    # print(type(tkm)) shows it as "list"  
    for row in tkm:   
        a = row.name  
        # print(type(a)) # shows "<class 'discord.member.Member'>" x amount of times
        await ctx.send(a)

这确实有点工作。机器人会在单独的消息中发送该角色中每个成员的姓名,但速度非常慢,甚至每次在列出 4-5 个成员后都会“停止”。 我找了一圈,只找到了类似的代码。

我不做 ctx.send(tkm) 的原因是它包含太多信息,对每个成员来说。这个可以post在聊天中一口气

[<Member id=_________ name='___' discriminator='__' bot=False nick='_____' guild=<Guild i
_______ name='________' shard_id=None chunked=True member_count=28>>,....]

它不会让我做 tkm.name(这是一个列表,列表没有属性 'name') 我只对名称感兴趣,因此“a = row.name”只提供了成员的名称。 但也会导致列表分裂并给我这些对象

<class 'discord.member.Member'>
<class 'discord.member.Member'>
...
...

我卡住的地方是: 我似乎无法执行 tkm = tk.members.name(同样,因为没有属性 'name')

我在这里想要的是将“a”中的成员返回到列表中,然后 post 聊天中的新列表。但我似乎无法弄清楚如何。 或者,如果有一种方法可以将“tkm”操作为仅以成员名称开头,那也可以。

谢谢:)

首先,感谢您费心写出如此详细的问题。回答起来有点棘手,因为它包含一些猜测,因为我们无法用可运行的示例轻松地重现它。有关详细信息,请参阅 MCVE 文章。

BUT... 由于您的问题非常详细,因此有助于进行一些“知情猜测”。我的猜测是:

我注意到两件事:首先你的代码中有这个:

# print(type(a)) # shows "<class 'discord.member.Member'>" x amount of times

还有这个:

... It's a list, and lists don't have attribute 'name' ...

所以我猜你有一个 dicord.member.Member 对象的列表。很可能每个这样的“成员” 都有 属性name。但是您遇到的问题是:“如何从该列表中获取每个成员的姓名?”。

你可以用一个“循环”来做到这一点。在 Python 中有一种非常好的形式,称为“列表理解”。在你的情况下它看起来像这样:

names = [item.name for item in a]

您还可以编写一个更“传统”的循环,如:

names = []
for item in a:
    names.append(item.name)

两种形式完全相同

同样,这是一个大胆的猜测,但如果运气好的话它会成功:)