diff --git a/import.py b/import.py index 4291066..5f13565 100644 --- a/import.py +++ b/import.py @@ -87,6 +87,7 @@ if TYPE_CHECKING: body: str url: str info: MatrixMediaInfo + id: str def convert_image(data: bytes) -> (bytes, int, int): @@ -113,12 +114,8 @@ async def reupload_document(client: TelegramClient, document: Document) -> 'Matr else: width = int(width / (height / 256)) height = 256 - body = "" - for attr in document.attributes: - if isinstance(attr, DocumentAttributeSticker): - body = attr.alt return { - "body": body, + "body": "", "url": mxc, "info": { "w": width, @@ -152,6 +149,21 @@ def add_to_index(name: str) -> None: print(f"Added {name} to {index_path}") +def add_meta(document: Document, info: 'MatrixStickerInfo', pack: StickerSetFull) -> None: + for attr in document.attributes: + if isinstance(attr, DocumentAttributeSticker): + info["body"] = attr.alt + info["id"] = str(document.id) + info["net.maunium.telegram.sticker"] = { + "pack": { + "id": str(pack.set.id), + "short_name": pack.set.short_name, + }, + "id": str(document.id), + "emoticons": [], + } + + async def reupload_pack(client: TelegramClient, pack: StickerSetFull) -> None: if pack.set.animated: print("Animated stickerpacks are currently not supported") @@ -183,18 +195,17 @@ async def reupload_pack(client: TelegramClient, pack: StickerSetFull) -> None: print(f"Skipped reuploading {document.id}") except KeyError: reuploaded_documents[document.id] = await reupload_document(client, document) - reuploaded_documents[document.id]["net.maunium.telegram.sticker"] = { - "pack": { - "id": str(pack.set.id), - "short_name": pack.set.short_name, - }, - "id": str(document.id), - "emoticons": [], - } + # Always ensure the body and telegram metadata is correct + add_meta(document, reuploaded_documents[document.id], pack) for sticker in pack.packs: + if not sticker.emoticon: + continue for document_id in sticker.documents: doc = reuploaded_documents[document_id] + # If there was no sticker metadata, use the first emoji we find + if doc["body"] == "": + doc["body"] = sticker.emoticon doc["net.maunium.telegram.sticker"]["emoticons"].append(sticker.emoticon) with open(pack_path, "w") as pack_file: diff --git a/web/index.js b/web/index.js index 1e5c625..ab39761 100644 --- a/web/index.js +++ b/web/index.js @@ -143,7 +143,7 @@ const Pack = ({ pack }) => html`

${pack.title}

${pack.stickers.map(sticker => html` - <${Sticker} key=${sticker["net.maunium.telegram.sticker"].id} content=${sticker}/> + <${Sticker} key=${sticker.id} content=${sticker}/> `)}
diff --git a/web/widget-api.js b/web/widget-api.js index 6d81107..8787262 100644 --- a/web/widget-api.js +++ b/web/widget-api.js @@ -35,17 +35,19 @@ window.onmessage = event => { export function sendSticker(content) { const data = { - content, + content: {...content}, // `name` is for Element Web (and also the spec) // Element Android uses content -> body as the name name: content.body, } + // Custom field that stores the ID even for non-telegram stickers + delete data.content.id // This is for Element iOS const widgetData = { ...data, description: content.body, - file: `${content["net.maunium.telegram.sticker"].id}.png`, + file: `${content.id}.png`, } // Element iOS explodes if there are extra fields present delete widgetData.content["net.maunium.telegram.sticker"]