(discord.py)我的机器人的whois命令(也显示用户的角色)将“ @everyone”显示为“ @@ everyone”。如何解决此问题

时间:2020-06-30 18:33:11

标签: python python-3.x discord discord.py

我的机器人有一个whois(别名userinfo)命令,该命令显示用户何时加入服务器,其最高角色等。在大多数情况下,此命令可以正常工作。但是,该机器人将角色“ @everyone”显示为“ @@ everyone”,它还显示了其他所有角色。这是我的代码:

@client.command(aliases=["whois"])
async def userinfo(ctx, member: discord.Member = None):
    if not member:  # if member is no mentioned
        member = ctx.message.author  # set member as the author
    roles = [role for role in member.roles]
    embed = discord.Embed(colour=discord.Colour.purple(), timestamp=ctx.message.created_at,
                          title=f"User Info - {member}")
    embed.set_thumbnail(url=member.avatar_url)
    embed.set_footer(text=f"Requested by {ctx.author}")

    embed.add_field(name="ID:", value=member.id)
    embed.add_field(name="Display Name:", value=member.display_name)

    embed.add_field(name="Created Account On:", value=member.created_at.strftime("%a, %#d %B %Y, %I:%M %p UTC"))
    embed.add_field(name="Joined Server On:", value=member.joined_at.strftime("%a, %#d %B %Y, %I:%M %p UTC"))

    embed.add_field(name="Roles:", value="".join([role.mention for role in roles]))
    embed.add_field(name="Highest Role:", value=member.top_role.mention)
    print(member.top_role.mention)
    await ctx.send(embed=embed)

这是我使用命令时机器人输出的内容:

Bot output

我不希望该机器人将“ @everyone”显示为“ @@ everyone”。我该如何解决?

1 个答案:

答案 0 :(得分:1)

如果您不想显示@@everyone,请不要从角色列表中获取它:roles = [role for role in member.roles[1:]]

来自文档:

角色

成员所属的角色列表。请注意,该列表的第一个元素是始终默认的“ @everyone”角色。

如果要将@@everyone显示为@everyone,则需要更改此名称,因为此角色的名称为@everyone,并且第一个@表示该成员的角色。

示例:

@bot.command()
async def who(ctx):
    member = ctx.message.author
    roles = [role.mention for role in member.roles[1:]]  # don't get @everyone
    roles.append('@everyone')  # set string @everyone instead of role
    await ctx.send(" ".join(roles))

结果:

Result

P.S。但是我认为最好使用@@everyone而不是@everyone或永远不要使用它(因为所有用户都具有此角色)。或者,当会员没有公会的任何角色时,也可以使用此角色。