найти функцию сохранения изображения при реагировании на разногласия - PullRequest
0 голосов
/ 16 декабря 2018

Я новичок в создании диссонирующих ботов.

Итак, я создал бота, смог заставить его говорить и т. Д. (Я использую Python 3.6)

Я сейчас пытаюсь скопировать изображениеиз канала, чтобы отправить его в другое место.Я не могу найти функцию, которая проверяет, отреагировала ли я на изображение, ни одну, чтобы сохранить изображение.

Я хочу сделать следующее: если кто-то реагирует на изображение с помощью: white_check_mark:,бот копирует это.

Если бы кто-то уже сделал это и смог показать это мне, это было бы здорово.

Большое спасибо.

1 Ответ

0 голосов
/ 16 декабря 2018

Существует два способа, которыми изображение может быть в сообщении.Это может быть вложение в это сообщение, где вы загружаете изображение со своего компьютера в Discord, или это может быть вставка, что происходит при вставке ссылки в Discord.

Пользователи реагируют на сообщения, а не на изображения.Всякий раз, когда пользователь реагирует на сообщение, о котором знает ваш бот, он вызывает событие on_reaction_add.Мы можем поместить код в это событие, чтобы проверить наличие определенной реакции, а затем сохранить файлы.

@bot.event
async def on_reaction_add(reaction, user):
    if reaction.emoji == '\N{WHITE HEAVY CHECK MARK}':
        for embed in reaction.message.embeds:
            if embed.url is not discord.Embed.Empty:
                url = embed.url
                name = url[url.rfind('/')+1:]
                async with aiohttp.ClientSession() as session:
                    async with session.get(url) as resp:
                        if resp.status == 200:
                            with open(f'imgs/{name}', 'wb+') as file:
                                file.write(await resp.read())
        for attachment in reaction.message.attachments:
            await attachment.save(f'imgs/{attachment.filename}')

Я написал это для более поздней ветки переписывания, версии 1.0.Если вы используете более старую асинхронную ветвь, 0.16, вам нужно будет изменить способ сохранения вложений.Я считаю, что вложения в более старых версиях хранились как словари, а не как объекты вложения.

Имейте в виду, что on_reaction_add запускается только для сообщений, которые кэшировал ваш бот. Реакции на старые сообщения не будут вызывать событие.

...