繁体   English   中英

如何从不和谐的成员那里获取角色名称

[英]How to get role names from member in discord

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

您可以替换:

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

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

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

所以在这里,我做了一个for loopmember.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}**')

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM