首页 > 解决方案 > (discord.py)我的机器人的 whois 命令也显示了用户的角​​色,将“@everyone”显示为“@@everyone”我该如何解决这个问题

问题描述

我的机器人有一个 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)

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

机器人输出

我不希望机器人将“@everyone”显示为“@@everyone”。我怎样才能解决这个问题?

标签: pythonpython-3.xdiscorddiscord.py

解决方案


如果您不想显示@@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))

结果:

结果

PS但我认为最好使用@@everyone而不是@everyone或永远不要使用它(因为所有用户都有这个角色)。或者,当成员在您的公会中没有任何角色时,您可以使用此角色。


推荐阅读