我想编写用户信息命令并想在那里显示用户的角色,但是当我尝试获得其角色时,我正在接收其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)
答案 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}**')
它将返回一个角色名称列表,例如管理员,所有者,主持人。