import os import re from datetime import datetime, timezone from os import path from imgur_python import Imgur from aiogram.types import Message, MessageEntity, PhotoSize from app.settings import notion, bot, secrets async def send_to_notion(message: Message, album): imgur_client = Imgur( {"client_id": secrets.imgur_client_id.get_secret_value()} ) pattern = r"(https?://[^\s]+|t\.me/[^\s]+)" image_url = None photos = [] if message.caption: links2 = re.findall(pattern, message.caption) text: str = message.caption links: MessageEntity = [ link.url for link in message.caption_entities if link.type == "text_link" ] if album: photos: PhotoSize = [photo.photo[-1].file_id for photo in album] elif message.photo: photos: PhotoSize = [message.photo[-1].file_id] else: text: str = message.text links2 = re.findall(pattern, message.text) photos = [] links: MessageEntity = ( [link.url for link in message.entities if link.type == "text_link"] if message.entities else [] ) if links2: links.extend(links2) links = set(links) properties = { "Name": {"title": [{"text": {"content": text[: text.find("\n") or -1]}}]}, "Text": {"rich_text": [{"text": {"content": text}}]}, "Added at": { "date": { "start": datetime.now().astimezone(timezone.utc).isoformat(), "end": None, } }, } for i, link in enumerate(links, start=1): if i > 4: break properties[f"Link{i}"] = {"url": link} cover = None if photos: for i, photo in enumerate(photos, start=1): if i > 9: break file_name = f"images/{photo}.jpg" await bot.download(photo, destination=file_name) image = imgur_client.image_upload( path.realpath(file_name), "Untitled", "My first image upload" ) image_url = image["response"]["data"]["link"] os.remove(file_name) if i == 1: cover = {"type": "external", "external": {"url": image_url}} properties[f"Image{i}"] = { "files": [ { "name": "image.jpg", "type": "external", "external": {"url": image_url}, } ] } icon = {"type": "emoji", "emoji": "🎉"} parent = { "type": "database_id", "database_id": secrets.database_id.get_secret_value(), } return await notion.pages.create( parent=parent, properties=properties, icon=icon, cover=cover )