如何从成员中获取角色名称不一致

时间:2020-10-03 14:36:04

标签: python discord bots discord.py

我想编写用户信息命令并想在那里显示用户的角色,但是当我尝试获得其角色时,我正在接收其ID。我怎么只能得到他们的名字?

# User info
@commands.command(aliases = ['usinfo'])
async def userinfo(self, ctx, member: discord.Member = None, guild: discord.Guild = None):
    member = ctx.author if not member else member
    guild = ctx.guild if not guild else guild
    emb = discord.Embed(description = "**{}'s info**".format(member.mention), colour = member.color)
    await ctx.channel.purge(limit = 1)
    channel = ctx.channel.id
    emb.set_author(name = guild, icon_url = guild.icon_url)
    emb.add_field(name = "**Status is**", value = '**{}**'.format(
        member.status).replace('dnd', '**Do not disturb**'))
    emb.add_field(name = '** **', value = '** **')
    if member.activity is not None:
        emb.add_field(name = "**Activity is**", value = '**{}**'.format(member.activity.name))
    else:
        emb.add_field(name = "**Activity is**".format(member.mention), value = '**Nothing**')
    emb.add_field( name = "**Roles are**", value = '**{}**'.format( member.roles ).replace('[<Role id=', '').replace('<Role id=', '').replace("name='", '').replace("'>", '').replace('@everyone', '').replace(']', '').replace('@everyone,', ''), inline = False )
    emb.set_thumbnail(url = member.avatar_url)
    await ctx.send(embed = emb)

2 个答案:

答案 0 :(得分:0)

您可以替换:

emb.add_field( name = "**Roles were**", value = '**{}**'.format( member.roles ).replace('[<Role id=', '').replace('<Role id=', '').replace("name='", '').replace("'>", '').replace('@everyone', '').replace(']', '').replace('@everyone,', ''), inline = False )

收件人:

emb.add_field(name="**Roles were**", value=f"**{', '.join([role.name for role in member.roles])}**")

答案 1 :(得分:0)

member.roles返回角色列表。为了获得角色的每个名称,您应该创建一个for loop。然后,您应该将角色名称保存在另一个列表中。

role_names = []
for role in member.roles:
    role_names.append(role.name)

所以在这里,我为for loop制作了member.roles,并将role.name保存在role_names列表中。

此后,您应该将此列表返回到string中,以使嵌入看起来更好。为此,您可以使用str.join()

role_names = []
for role in member.roles:
    role_names.append(role.name)
role_names = ', '.join(role_names)

因此,如果您将此代码添加到代码中,则可以

emb.add_field(name="**Roles are**", value=f'**{role_names}**')

它将返回一个角色名称列表,例如管理员,所有者,主持人

相关问题