Как сделать команду в дискорд боте, которая принимает на вход файл
Как сделать команду которая принимает файл(изображение) сохраняет его в папке, или сохраняет его url?
Подразумевается такое использование:
>test (прикреплено изображение)
и программа допустим сохраняет в переменную data url адрес этого изображения или сохраняет его в папке с программой в png или jpg файл
Ответы (1 шт):
У класса discord.Message
есть атрибут attachments
хранящий список прикрепленных к этому сообщению файлов в виде экземпляров класса discord.Attachment
у которого, в свою очередь есть атрибуты:
content_type, хранящий в виде строки тип файла в форматеMedia typefilename— имя прикрепленного файлаurl— ссылка на файл
и другие, про которые можно также почитать в документации.
Далее, из контекста ctx получаем объект сообщения ctx.message, а из него список его файлов ctx.message.attachments.
Фильтруем список по типу файлов, чтобы там остались только изображения и, если список не пустой, то сохраняем все файлы и отправляем сообщение.
import discord
from discord.ext import commands
bot = commands.Bot(command_prefix='>', intents=discord.Intents.all())
@bot.command(name='test')
async def test(ctx: commands.Context) -> None:
images = [file for file in ctx.message.attachments if 'image' in file.content_type]
if not images:
return await ctx.reply('Прикрепите изображение(я)')
for image in images:
with open(image.filename, 'wb') as image_file:
await image.save(image_file)
await ctx.reply(f'Сохраненные изображения: ' + ', '.join(f'[{image.filename}](<{image.url}>)' for image in images))
bot.run('TOKEN')
Результат:
В документации есть вся информация. По возможности, старайтесь сначала самостоятельно изучать содержимое классов, с которыми вы можете работать, обрабатывая команды.
На всякий случай, вот руководство по работе с документацией




