如何从不协调的成员中获取角色名称



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

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}**')

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

您可以替换:

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

最新更新