显示角色成员 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)
两种形式完全相同
同样,这是一个大胆的猜测,但如果运气好的话它会成功:)
我正在尝试为 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)
两种形式完全相同
同样,这是一个大胆的猜测,但如果运气好的话它会成功:)