python - (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”。我怎样才能解决这个问题?
解决方案
如果您不想显示@@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
或永远不要使用它(因为所有用户都有这个角色)。或者,当成员在您的公会中没有任何角色时,您可以使用此角色。
推荐阅读
- node.js - Windows 上的 Git bash 或 NPM 正在将参数转换为路径
- flutter - 如何重新排列飞镖中的地图键?
- javascript - 检测文件上传是来自拖动还是常规输入单击
- google-workspace - 如何将gmail附件移动到云存储?
- css - CSS 文件未加载 Laravel 本地主机
- java - Hazelcast VersionedPortable 如何与类继承一起工作
- r - 更改堆积条形图上的字体颜色
- javascript - 如何从日常运动播放器中获取实时视频的延迟
- sql - 无法在 select 语句中使用 count() 创建临时表
- javascript - 控制台说无法读取 charCodeAt 属性