Получение файла без его сохранения aiohttp discord.py - PullRequest
0 голосов
/ 08 мая 2018

Итак, у меня есть команда, которая отправляет все, что пользователь сказал после команды, на веб-сайт API и отправляет файл, который генерирует сайт. Однако я перехожу на aiohttp, так как он не блокируется, как функции запрошенных запросов

Вот как я делаю это с обычными запросами, и он отлично работает:

      elif (data[0].lower() == ">signgirl"):
        await bot.send_typing(message.channel)

        tmp = message.content.replace(">signgirl", "")

        m = hashlib.md5()
        m.update(tmp.encode('utf-8'))

        print(tmp, m.hexdigest())
        r = requests.post("http://localhost/sign.php", stream=True, data={'text': tmp})
        if (r.status_code() == 200):
            await bot.send_file(destination=message.channel, filename=str(m.hexdigest()+".png"), fp=r.raw)

Однако, когда я пытаюсь использовать aiohttp, я понятия не имею, как на самом деле получить необработанные данные файла .. Так что я сделал эту функцию, чтобы получить ее. но это не позволяет мне вернуть изображение, и я не могу проверить код состояния http, если он не вызывает ошибку.

async def post_data2(url, payload):
async with aiohttp.ClientSession() as session2:
    async with session2.post(url, data=payload) as response2:
        output = {}
        output['data'] = await Image.open(BytesIO(response2.read()))
        output['status'] = 200 #await str(response2.status()) #Why is this object not callable?
        return output

Как еще я могу это сделать? Это возможно? Aiohttp не так легко понять.

1 Ответ

0 голосов
/ 08 мая 2018

Мистер Дэй "V" Собственный с сервера discord.py отправил прекрасный пример получения и отправки данных

async with aiohttp.ClientSession() as session:
    # or use a session you already have
    async with session.get("http://example.com") as resp:
        buffer = io.BytesIO(await resp.read())
        # buffer is a file-like

await client.send_file(channel, fp=buffer, filename="whatever")
...