首页 > 解决方案 > 如何解决未找到成员错误?

问题描述

我有一个命令,你应该有 3 个选项:

1)提及用户

2) 输入用户名

3) 输入任意名称

在所有 3 种情况下,机器人都应该使用适当的输入吐出嵌入。在这样做时,它应该:

  1. 如果是 Discord 用户,请在描述中标记。
  2. 如果它不是用户,则只需接受输入的名称,但无论如何发送带有描述中名称的嵌入。

它的正常工作方式:

@client.command()
async def slap(ctx, *, member: discord.Member):
    if member is None:
        re = discord.Embed()
        re.title = "Du hast die Luft geschlagen, Idiot..."
        re.set_image(url="https://i.pinimg.com/originals/8f/f9/f9/8ff9f9b0e469f751f47fc0a995a172ad.gif")
        await ctx.send(embed=re)

    else:
        er = discord.Embed()
        er.title = "Das muss weh tun..."
        er.description = f"Du hast {member.mention} geschlagen!"
        er.set_image(url=random.choice(slapgif))
        await ctx.send(embed=er)

但是,如果我输入一个随机名称,它会给我BadArgument错误。我怎样才能避免这种情况并接受随机名称?

我试过了:

user: str = None

这当然只给出输入时的 ID,但也给出当然需要的名称,但如果它在服务器上,I'mTest123则带有 ID 的应该以 a 结尾。member

标签: discorddiscord.py

解决方案


它给出了错误,因为您将成员参数指定为不和谐成员,将其更改为此应该可以:

    @client.command()
    async def slap(ctx, *, member=None):
       if member is None:
          re = discord.Embed()
          re.title = "Du hast die Luft geschlagen, Idiot..."
          re.set_image(url="https://i.pinimg.com/originals/8f/f9/f9/8ff9f9b0e469f751f47fc0a995a172ad.gif")
          await ctx.send(embed=re)

       else:
          er = discord.Embed()
          er.title = "Das muss weh tun..."
          er.description = f"Du hast {member.mention} geschlagen!"
          er.set_image(url=random.choice(slapgif))
          await ctx.send(embed=er)

此外,如果您希望它接受随机名称,您可以在 if 语句中使用 isinstance() 和 type() 函数,如下所示:

    @client.command()
    async def slap(ctx, *, member=None):
       if member is None:
           re = discord.Embed()
           re.title = "Du hast die Luft geschlagen, Idiot..."
           re.set_image(url="https://i.pinimg.com/originals/8f/f9/f9/8ff9f9b0e469f751f47fc0a995a172ad.gif")
           await ctx.send(embed=re)
 
        else:
           if isinstance(member, discord.Member): #checks if it's a discord.member
              er = discord.Embed()
              er.title = "Das muss weh tun..."
              er.description = f"Du hast {member.mention} geschlagen!"
              er.set_image(url=random.choice(slapgif))
              await ctx.send(embed=er)
           elif len(member) == 18 and type(int(member)) == int: #checks if it's an user ID
              member2 = await ctx.guild.fetch_member(int(member))
              er = discord.Embed()
              er.title = "Das muss weh tun..."
              er.description = f"Du hast {member2.mention} geschlagen!"
              er.set_image(url=random.choice(slapgif))
              await ctx.send(embed=er)
           else:
              er = discord.Embed()
              er.title = "Das muss weh tun..."
              er.description = f"Du hast {member} geschlagen!"
              er.set_image(url=random.choice(slapgif))
              await ctx.send(embed=er)

推荐阅读