@Romikan

Не работает JSON в дискорд боте. Что делать?

Вчера бот работал просто прекрасно! Показывал рандомные картинки и тд. А сегодня у меня JSON почему-то сломался и когда я хочу получить рандомную картинку пишет:
Ignoring exception in command fox:
Traceback (most recent call last):
  File "C:\Users\Lenovo\AppData\Roaming\Python\Python310\site-packages\discord\ext\commands\core.py", line 85, in wrapped
    ret = await coro(*args, **kwargs)
  File "C:\Users\Lenovo\Documents\амогус\bot.py", line 397, in fox
    json_data = json.loads(response.text) # Извлекаем JSON
  File "C:\Program Files\Python310\lib\json\__init__.py", line 346, in loads
    return _default_decoder.decode(s)
  File "C:\Program Files\Python310\lib\json\decoder.py", line 337, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "C:\Program Files\Python310\lib\json\decoder.py", line 355, in raw_decode
    raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "C:\Users\Lenovo\AppData\Roaming\Python\Python310\site-packages\discord\ext\commands\bot.py", line 939, in invoke
    await ctx.command.invoke(ctx)
  File "C:\Users\Lenovo\AppData\Roaming\Python\Python310\site-packages\discord\ext\commands\core.py", line 863, in invoke
    await injected(*ctx.args, **ctx.kwargs)
  File "C:\Users\Lenovo\AppData\Roaming\Python\Python310\site-packages\discord\ext\commands\core.py", line 94, in wrapped
    raise CommandInvokeError(exc) from exc
discord.ext.commands.errors.CommandInvokeError: Command raised an exception: JSONDecodeError: Expecting value: line 1 column 1 (char 0)

Код бота:
@bot.command()
@commands.cooldown(1, 1, commands.BucketType.user)
async def fox(ctx):
    response = requests.get('https://some-random-api.ml/img/fox') # Get-запрос
    json_data = json.loads(response.text)

    embed = discord.Embed(color = 0xff9900, title = 'Рандомная Лиса') # Создание Embed'a
    embed.set_image(url = json_data['link']) # Устанавливаем картинку Embed'a
    await ctx.send(embed = embed) # Отправляем Embed
  • Вопрос задан
  • 151 просмотр
Пригласить эксперта
Ответы на вопрос 3
AlexNest
@AlexNest
Работаю с Python/Django
Зачем подобные извращения?
Если уж взяли requests вместо urllib, то уделили бы 10 секунд на чтения примеров. Там четко видно, что для работы с json есть специальный метод .json()
Ответ написан
Комментировать
Vindicar
@Vindicar
RTFM!
Во-первых, используй httplib. Она идёт как зависимость к discord.py, так что ставить её отдельно не надо. Зато она асинхронная, и не будет вешать бота на время выполнения запроса.
Во-вторых, при работе с сетью всегда предполагай подвох! Сайт, к которому ты обращаешься, может тебе ответить сразу, ответить через 5 минут, не ответить вовсе, ответить сообщением об ошибке, или отредиректить на фото задницы - гарантий тут нет, так как ты этот сайт не контролируешь. Поэтому ОБЯЗАТЕЛЬНО лови исключения, и сообщай о произошедшем либо пользователю, либо себе в личку.
Ответ написан
Комментировать
Coolcat66666
@Coolcat66666
import requests
import string, json

bot = commands.Bot(command_prefix = 'prefix')

@bot.command()
async def fox(ctx):
    response = requests.get('https://some-random-api.ml/img/fox')
    json_data = json.loads(response.text)

    embed = discord.Embed(color = 0xff9900, title = 'Рандомная Лиса') 
    embed.set_image(url = json_data['link']) 
    embed.set_footer(text = ctx.author.name , icon_url = ctx.author.avatar_url)
    await ctx.send(embed = embed)

bot.run('token')
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы