我声明替换成员不和谐机器人

me statement replacing member discord bot

所以我有一个可以正常工作的 whois 命令,但是当我说 .whois me 时,我正试图让它显示我的信息。但是我尝试了一个 if 语句它没有用

代码:



@client.command(pass_context=True)
async def whois(ctx, member : discord.Member):

    with open('main code\mbot json storage\pp.json', 'r') as f:
        prefixes = json.load(f)


    if member == "me":
        member = ctx.message.author    #I tried doing this

    prefix = prefixes[str(ctx.guild.id)]

    roles = [role for role in member.roles]


    embed = discord.Embed(colour=member.color, timestamp=ctx.message.created_at)

    embed.set_author(name=f'User Info - {member}')
    embed.set_thumbnail(url=member.avatar_url)
    embed.set_footer(text=f"Asked by {ctx.author}", icon_url=ctx.author.avatar_url)

    embed.add_field(name='ID:', value=member.id)
    embed.add_field(name='Guild name:', value=member.display_name)
    embed.add_field(name='Created At:', value=member.created_at.strftime("%a, %#d %B %Y, %I:%M %p "))
    embed.add_field(name='Joined At:', value=member.joined_at.strftime("%a, %#d %B %Y, %I:%M %p "))
    embed.add_field(name=f'Roles ({len(roles)})', value=" ".join([role.mention for role in roles]))
    embed.add_field(name='Top role:', value=member.top_role.mention)
    embed.add_field(name="Platform", value=f"{'Mobile' if member.is_on_mobile() else 'PC'}", inline=False)
    embed.add_field(name="Admin?", value=f"{member.guild_permissions.administrator}", inline=True)
    embed.add_field(name='Bot?', value=f"{'Bot' if member.bot else 'Human'}", inline=True)

    await ctx.send(embed=embed)


我不是 python 专家,但我相信您的命令函数期望 member 参数的类型为 discord.Member。你在运行.whois me的时候没有说出什么问题,所以我会假设问题是由这种期望引起的。

我建议将参数默认设置为 None,然后检查它。这会将您的 self-whois 命令从 .whois me 更改为 .whois.
或者,您可以期待一个字符串并自己解析用户。

您当前的代码不可能,您使用的是 MemberConverter,如果您输入 me 它不会起作用,您可以简单地将成员参数设为可选,并且当它是 None 时,使用 ctx.author 作为成员参数

@bot.command()
async def whois(ctx, member: discord.Member=None):
    if member is None:
        member = ctx.author

    # Put the rest of the code here

调用它很简单!whois,它会给你你自己的信息。