【问题标题】:How to get role names from member in discord如何从不和谐的成员那里获取角色名称
【发布时间】:2021-01-18 22:43:35
【问题描述】:

我想编写用户信息命令并想在那里显示用户的角色,但是当我尝试获取他们的角色时,我收到了他们的 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)

【问题讨论】:

    标签: python discord bots discord.py


    【解决方案1】:

    你可以替换:

    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])}**")
    

    【讨论】:

    • 谢谢!我是 python 新手,所以我需要了解更多... xD。
    【解决方案2】:

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

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

    所以在这里,我为member.roles 创建了一个for loop,并将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}**')

    它将返回一个角色名称列表,例如 Admin、Owner、Moderator

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-22
      • 2021-05-15
      • 2021-02-16
      • 2020-12-05
      • 2018-10-22
      • 2017-12-07
      • 2021-06-16
      • 2021-11-18
      相关资源
      最近更新 更多