显示角色成员discord.py

问题描述

我正在尝试为不和谐的bot(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)的原因是,对于每个成员,它都包含太多信息。它可以一口气发布在聊天中。

[<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”中的成员重新添加到列表中,然后在聊天中发布新列表。但是我似乎不知道如何。 或者,如果有一种方法可以操纵“ tkm”,使其仅以成员名开头,那么也可以。

谢谢:)

解决方法

首先,感谢您辛苦编写了如此详细的问题。这有点棘手,因为它包含一些猜测,因为我们无法通过一个可运行的示例轻松地重现该猜测。有关更多信息,请参见MCVE的文章。

...由于您的问题如此详细,因此有助于进行一些“明智的猜测”。我的猜测是这样的:

我注意到了两件事:首先,您的代码中有此内容:

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

还有这个:

...这是一个列表,并且列表没有属性'name'...

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

您可以使用“循环”执行此操作。 Python中有一个非常不错的形式,称为“列表理解”。在您的情况下看起来像这样:

names = [item.name for item in a]

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

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

两种形式是相同的

再次,这是一个疯狂的猜测,但是幸运的是,它将起作用:)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...