【问题标题】:Display role members discord.py显示角色成员 discord.py
【发布时间】:2020-12-19 20:24:43
【问题描述】:

我正在尝试为 discord 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”操作为仅以成员名称开头,那也可以。

谢谢你:)

【问题讨论】:

    标签: python discord roles member


    【解决方案1】:

    首先,感谢您努力写出如此详细的问题。这有点难以回答,因为它包含一些猜测,因为我们无法通过可运行的示例轻松重现这一点。有关更多信息,请参阅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)
    

    这两种形式是一样的

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

    【讨论】:

    • 感谢您的回答!我的解释可能有点不清楚:tkm 是一个列表,我不能将属性“.name”分配给它。打开列表后,使用“for row in tkm:”,行类型变为“”,我可以对其应用“.name”属性。但它只是为每个成员打印一行。试图附加这个只会返回None,类型是'NoneType'。它仍然不是一个列表。并感谢您提供 MCVE 的链接,下次会阅读并发布更好的帖子!
    • 我认为我在第一次编写您的解决方案时犯了一个错误。一直在阅读“列表理解”,结果你的解决方案是:names = [item.name for item in a] 是正确的,一旦我输入正确,一切都解决了!感谢帮助和提示!
    猜你喜欢
    • 1970-01-01
    • 2021-06-12
    • 2021-06-29
    • 2021-10-16
    • 2021-07-26
    • 2021-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多