首页 > 解决方案 > 我的 if 语句在我的 whois 命令中不起作用 | 不和谐.py

问题描述

所以我正在制作一个 whois 命令,并且我正在制作的 if 语句使得如果用户没有角色,则 value=None。但是,我遇到了麻烦。这是代码

  @commands.command(aliases=["whois"])
  async def userinfo(self, ctx, member: discord.Member = None):
      if not member: 
        member = ctx.message.author
      embed = discord.Embed(colour=discord.Colour(random.randint(1, 16777215)), timestamp=ctx.message.created_at,title=f"User Info - {member}")
      embed.set_thumbnail(url=member.avatar_url)
      embed.add_field(name="Name", value=member.name)
      embed.add_field(name="ID:", value=member.id)
      embed.add_field(name="Nickname:", value=member.display_name)
      embed.add_field(name="Status", value=member.status)
      embed.add_field(name="Created Account On:", value=member.created_at.strftime("%a, %#d %B %Y, %I:%M  UTC"))
      embed.add_field(name="Joined Server On:", value=(member.joined_at.strftime("%a, %#d %B %Y, %I:%M %p UTC")))
      roles = [role.mention for role in member.roles[1:]]
      embed.add_field(name=f"Roles({len(roles)}):",value=",".join(roles), 
      inline=False)
      embed.add_field(name="Highest Role:", value=member.top_role.mention)
      await ctx.send(embed=embed)
      if roles == None: 
        embed.add_field(name="Roles", value="None", inline=False)

所以我问了我的朋友谁擅长python,他给我发了这个:

  @commands.command(aliases=["whois"])
  async def userinfo(self, ctx, member: discord.Member = None):
      if not member: 
        member = ctx.message.author
      embed = discord.Embed(colour=discord.Colour(random.randint(1, 16777215)), timestamp=ctx.message.created_at,title=f"User Info - {member}")
      embed.set_thumbnail(url=member.avatar_url)
      embed.add_field(name="Name", value=member.name)
      embed.add_field(name="ID:", value=member.id)
      embed.add_field(name="Nickname:", value=member.display_name)
      embed.add_field(name="Status", value=member.status)
      embed.add_field(name="Created Account On:", value=member.created_at.strftime("%a, %#d %B %Y, %I:%M  UTC"))
      embed.add_field(name="Joined Server On:", value=(member.joined_at.strftime("%a, %#d %B %Y, %I:%M %p UTC")))
      roles = [role.mention for role in member.roles[1:]]
      if roles == None:    embed.add_field(name=f"Roles({len(roles)}):",value=",".join(roles), inline=False)
      embed.add_field(name="Highest Role:", value=member.top_role.mention)
      await ctx.send(embed=embed)

这是错误

In embed.fields.6.value: This field is required

它有效,但问题是它显示了@@everyone 角色,我怎样才能摆脱@@everyone 角色?

标签: discord.py

解决方案


这是固定代码,@everyone角色始终是成员的第一个角色,因此只需通过从第二个元素访问列表来排除他:member.roles[1:],同样当您尝试发送嵌入但用户除了角色之外没有其他@everyone角色时由于列表为空,因此会出现错误roles,因此您必须包含检查以防止插入空值。

commands.command(aliases=["whois"])
async def userinfo(self, ctx, member: discord.Member = None):
    if not member: 
        member = ctx.message.author
    embed = discord.Embed(colour=discord.Colour(random.randint(1, 16777215)), timestamp=ctx.message.created_at,title=f"User Info - {member}")
    embed.set_thumbnail(url=member.avatar_url)
    embed.add_field(name="Name", value=member.name)
    embed.add_field(name="ID:", value=member.id)
    embed.add_field(name="Nickname:", value=member.display_name)
    embed.add_field(name="Status", value=member.status)
    embed.add_field(name="Created Account On:", value=member.created_at.strftime("%a, %#d %B %Y, %I:%M  UTC"))
    embed.add_field(name="Joined Server On:", value=(member.joined_at.strftime("%a, %#d %B %Y, %I:%M %p UTC")))

    # Fixed part
    roles = [role.mention for role in member.roles[1:]]

    if len(member.roles[1:]) < 1:
        embed.add_field(name=f"Roles:",value="None", inline=False)
        embed.add_field(name="Highest Role:", value="None")
    elif roles != None:
        embed.add_field(name=f"Roles({len(roles)}):",value=",".join(roles), inline=False)
        embed.add_field(name="Highest Role:", value=member.top_role.mention)
    # End of fix
    
    await ctx.send(embed=embed)

推荐阅读