Если используете чей-то API, то стоит глянуть доку, что возвращается в случае неудачи (ну или просто самому попробовать). Скорее всего либо 4XX/5XX статусы, либо условный
{"success": "false"}
. Далее уже проверяете статус код, либо что нибудь в теле ответа. Это будет правильно.
Чтобы именно ваш код работал, удалите
KeyError
, вряд ли такой вид вообще вызывается при таком коде
upd: а, нифига себе,
some-random-api
не заглушка, а реальный сайт)
Как и следовало, ошибки 500.
@commands.command()
async def lyrics(self, ctx,*, title):
url = f"https://some-random-api.ml/lyrics?title={title}"
req = requests.get(url)
response = req.json()
if req.status_code == 200:
lyrics = response['lyrics']
if len(lyrics) > 2048:
em = discord.Embed(title=title,description = f"Я не смог отправить текст этой песни, поскольку он превышает 2000 символов. Однако вот файл с текстами песен!",color=0xa3a3ff)
await ctx.send(embed=em)
with open('lyrics.txt', 'w', encoding='utf-8') as f:
f.write(lyrics)
await ctx.send(file=discord.File('lyrics.txt'))
else:
em = discord.Embed(title=title,description=lyrics,color=0xa3a3ff)
await ctx.send(embed=em)
elif req.status_code == 500:
error = response.get('error', '?')
if error == 'Sorry I couldn\'t find that song\'s lyrics':
em = discord.Embed(title="Вот блин!",description="Мне не удалось найти текст этой песни.",color = 0xa3a3ff)
em.set_thumbnail(url='https://cdn.discordapp.com/attachments/830818408550629407/839555682436251698/aw_snap_large.png')
await ctx.send(embed=em)
elif error == 'Something went wrong with fetching the lyrics':
# тут что-то отвалилось, 500 код как он есть, можно попробовать запрос еще раз отправить на сайт,
# либо сказать пользователю что на сайте проблемы, пусть еще раз попробует
pass
else:
em = discord.Embed(title="Вот блин!", description=f"Неизвестная ошибка: {error}",color = 0xa3a3ff)
em.set_thumbnail(url='https://cdn.discordapp.com/attachments/830818408550629407/839555682436251698/aw_snap_large.png')
await ctx.send(embed=em)
else:
# ну тут уже бог знает что случилось, сайт ни ошибкой, ни хорошим ответом не порадовал.
x4zx, обновил ответ