Некоторое время я разрабатывал бота 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 и не собираюсь переносить на нее весь свой бот, поэтому, пожалуйста, не предлагайте