Возможно ли отправка только что отправленной пользователем фотографии в 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())