我的机器人有一个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”。我该如何解决?
答案 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))
结果:
P.S。但是我认为最好使用@@everyone
而不是@everyone
或永远不要使用它(因为所有用户都具有此角色)。或者,当会员没有公会的任何角色时,也可以使用此角色。