@LimeGeeg

Как сделать что бы бот ожидал пока пользователь прикрепит файл, а потом сохранит его в discord.py?

Нужно сделать так, что бы бот ожидал на протяжении 60 секунд пока пользователь отправит картинку. После чего бот должен ее сохранить в корневую папку с файлом. Библиотека discord.py

for attach in mag5.attachments:
          await attach.save(f"./{message.author.id}.png")


Вот код сохранения файла, он будет работать если внедрить в структуру on_message. Но мне нужно сделать что бы бот ожидал, пока пользователь отправит файл, а потом эта часть кода сделает свое дело, и как это сделать я не знаю
  • Вопрос задан
  • 121 просмотр
Ответы на вопрос 2
Vindicar
@Vindicar
RTFM!
Отправленный файл - это ведь тоже сообщение, просто с прикреплённым аттачем. Почему бы не обрабатывать сообщения от пользователей и смотреть аттачи? Строго говоря, файл и команда могут вообще быть в одном сообщении, хотя это несколько менее удобно.
А вообще ты встретился с необходимостью в машине состояний. В discord.py её вроде нет "из коробки", придётся самому реализовывать. Это не так сложно, просто нужно вести список или словарь пользователей, от которых мы ждём файл. При поступлении сообщения с файлом смотрим, есть ли отправитель в этом списке. Если есть, обрабатываем файл и убираем его оттуда, если нет - игнорируем сообщение.
С таймаутом сложнее, но можно в списке хранить не id пользователя, а пары id-метка времени. Тогда можно будет понять, когда был послан запрос, и периодически удалять "старые" записи из списка.
Ответ написан
@RuslanUC
В discord.py есть функция wait_for, которая ждёт определённое событие, и если такое произошло, то оно возвращает результат.

msg = await bot.wait_for('message', timeout=60, check=lambda m: m.channel == message.channel and m.author == message.author)
for attach in msg.attachments:
    await attach.save(f"./{message.author.id}.png")
Ответ написан
Ваш ответ на вопрос

Вопрос закрыт для ответов и комментариев

Потому что уже есть похожий вопрос.
Похожие вопросы