discord.py странная проблема с функцией set_image () встраивания - PullRequest
0 голосов
/ 22 февраля 2019

Некоторое время я разрабатывал бота Discord с discord.py и часто использовал встраивание и настройку их изображений с помощью функции set_image () для доступа к данным изображений с различных сайтов.например: embed.set_image(url='https://img.pokemondb.net/artwork/large/{}.jpg'.format(pokemon.name.lower())) , чтобы установить изображение для запрошенного покемона.

Мое последнее стремление было создать команду для отображения кожи / головы игрока Minecraft с учетом их имени пользователя.Мой код:

@bot.group(pass_context = True, aliases = ['minecraft'])
async def mc(ctx):
    if ctx.invoked_subcommand is None:
        embed = discord.Embed(
        title = 'Error!', 
        description = ':x: Please specify a subcommand!',
        color = 10891826
        )
        await bot.say(embed = embed)






@mc.command()
async def head(username = None):
    if username is None:
        embed = discord.Embed(
        title = 'Error!', 
        description = ':x: Head not found! Did you spell the username right? It is case-sensitive.',
        color = 10891826
        )
        await bot.say(embed = embed)
    else:
        http_conn = http.client.HTTPSConnection("api.mojang.com")
        http_conn.request("GET", "/users/profiles/minecraft/" + username,
            headers={'User-Agent':'Minecraft Username -> UUID', 'Content-Type':'application/json'})
        response = http_conn.getresponse().read().decode("utf-8")

        if (not response): 
            return ""

        json_data = json.loads(response)
        try:
            uuid = json_data['id']
        except KeyError as e:
            print("KeyError raised:", e)

        embed = discord.Embed(
        title = 'Head of {}'.format(username),
        color = 53380
        )
        embed.set_image(url = 'https://crafatar.com/avatars/{}.jpg'.format(uuid))
        await bot.say(embed = embed)





@mc.command()
async def skin(username = None):
    if username is None:
        embed = discord.Embed(
        title = 'Error!', 
        description = ':x: Skin not found! Did you spell the username right? It is case-sensitive.',
        color = 10891826
        )
        await bot.say(embed = embed)
    else:

        http_conn = http.client.HTTPSConnection("api.mojang.com")
        http_conn.request("GET", "/users/profiles/minecraft/" + username,
            headers={'User-Agent':'Minecraft Username -> UUID', 'Content-Type':'application/json'})
        response = http_conn.getresponse().read().decode("utf-8")

        if (not response): 
            return ""

        json_data = json.loads(response)
        try:
            uuid = json_data['id']
        except KeyError as e:
            print("KeyError raised:", e)

        embed = discord.Embed(
        title = 'Skin of {}'.format(username),
        color = 53380
        )
        embed.aet_image(url = 'https://crafatar.com/renders/body/{}.jpg'.format(uuid))
        await bot.say(embed = embed)

Для некоторых имен пользователей все работает нормально, но для других изображение просто не отображается.Некоторые странные случаи даже работают для команды head, но не для команды skin (или наоборот).После долгих экспериментов я заметил, что переключение расширения с .jpg на .png решает проблему для тех, кто не работает, и останавливает те, которые ранее работали, от работы.Ввод значений вручную на сайт crafatar (с любым расширением или даже без расширения вообще) дает действительную прямую ссылку на изображение, но по какой-то причине она не загружается в код для вставки.Это не дает мне никакой ошибки или исключения, поэтому я не могу решить эту проблему, исключив и изменив его на .png в операторе исключения, оставив меня потерянным.Если кто-нибудь знает, почему это происходит или что я могу сделать, чтобы это исправить, я буду очень благодарен.Я, вероятно, просто глуп, но я слишком много времени потратил на это, все, что я выкопал в Интернете, это люди, которые забывают использовать kwargs (то есть set_image('url'), а не set_image(url='url'), и это причиняет боль моему мозгу.

Примечание: я не использую перезаписанную версию discord.py и не собираюсь переносить на нее весь свой бот, поэтому, пожалуйста, не предлагайте

...