инструкция me, заменяющая участника discord bot

#python #python-3.x #discord #discord.py #discord.py-rewrite

#python #python-3.x #Discord #discord.py #discord.py-переписать

Вопрос:

Итак, у меня есть команда whois, которая работает нормально, но я пытаюсь сделать это, когда я говорю .whois me, он показывает мою информацию. Но я попробовал использовать оператор if, он не сработал

Код:

 

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

    with open('main codembot json storagepp.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)


 

Ответ №1:

Это невозможно с текущим имеющимся у вас кодом, вы используете MemberConverter , если вы ставите me , что это не сработает, вы можете просто сделать аргумент member необязательным, и когда он None используется ctx.author в качестве аргумента member

 @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 , и он предоставит вам информацию о себе.

Ответ №2:

Я не эксперт по python, но я полагаю, что ваша командная функция ожидает, что member параметр имеет тип discord.Member . Вы не указали, что идет не так при запуске .whois me , поэтому я предполагаю, что проблема вызвана ожиданием этого типа.

Я предлагаю сделать параметр по умолчанию None равным и проверить это вместо этого. Это изменило бы вашу команду самостоятельного whois с .whois me на just .whois .
В качестве альтернативы, вы можете ожидать строку и самостоятельно анализировать пользователя.