Возможно ли отправка только что отправленной пользователем фотографии в aiogram3 БЕЗ использования БД?

Вообщем я делаю анонимного бота в чате, т.е. отправленное пользователем сообщение автоматически удаляется, а затем это же сообщение отправляется от лица бота. Т.к. я делаю бота для канала, в котором будут обсуждаться лабы контрольные и тому подобное, и в коментах будут выставляться фотки с исправлениями, поэтому для этого мусора не хотелось бы задействовать БД, т.к. на используемом серваке немного места. Как этом можно было бы реализовать?(¬_¬;)

P.S. Заранее спасибо, а как это сделать в БД я уже знаю (´• ω •`)


Ответы (1 шт):

Автор решения: Baggrisha

Если тебя правильно понял, то можешь вот это попробовать

import asyncio
import secrets
import requests
from aiogram.fsm.storage.memory import MemoryStorage
from aiogram.types import FSInputFile
from aiogram import *
from PIL import Image
import io
import os

TOKEN = ""
bot = Bot(TOKEN)
dp = Dispatcher(storage=MemoryStorage())

                    @dp.message(F.photo)
async def post_send_photo(msg: types.Message):
    file_id = msg.photo[3].file_id
    resp = requests.get(f"https://api.telegram.org/bot{TOKEN}/getFile?file_id={file_id}")
    img_path = resp.json()["result"]["file_path"]
    img = requests.get(f"https://api.telegram.org/file/bot{TOKEN}/{img_path}")
    img = Image.open(io.BytesIO(img.content))
    if not os.path.exists("static"):
        os.mkdir("static")
    img_name = secrets.token_hex(8)
    img.save(f"static/{img_name}.png", format="PNG")
    await bot.delete_message(chat_id=msg.chat.id, message_id=msg.message_id)
    await bot.send_photo(chat_id=твой канал, photo=FSInputFile(f"static/{img_name}.png"))
    os.remove(f"static/{img_name}.png")


async def main():
    await dp.start_polling(bot)

if __name__ == "__main__":
    asyncio.run(main())
→ Ссылка