Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added animated telegram sticker support for sticker-import #63

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions sticker/lib/util.py
Original file line number Diff line number Diff line change
Expand Up @@ -57,23 +57,23 @@ def add_to_index(name: str, output_dir: str) -> None:


def make_sticker(mxc: str, width: int, height: int, size: int,
body: str = "") -> matrix.StickerInfo:
body: str = "", mimetype: str = "image/png") -> matrix.StickerInfo:
return {
"body": body,
"url": mxc,
"info": {
"w": width,
"h": height,
"size": size,
"mimetype": "image/png",
"mimetype": mimetype,

# Element iOS compatibility hack
"thumbnail_url": mxc,
"thumbnail_info": {
"w": width,
"h": height,
"size": size,
"mimetype": "image/png",
"mimetype": mimetype,
},
},
"msgtype": "m.sticker",
Expand Down
25 changes: 20 additions & 5 deletions sticker/stickerimport.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,13 @@
import os.path
import json
import re

import os
from telethon import TelegramClient
from telethon.tl.functions.messages import GetAllStickersRequest, GetStickerSetRequest
from telethon.tl.types.messages import AllStickers
from telethon.tl.types import InputStickerSetShortName, Document, DocumentAttributeSticker
from telethon.tl.types.messages import StickerSet as StickerSetFull

from subprocess import run
from .lib import matrix, util


Expand All @@ -39,6 +39,19 @@ async def reupload_document(client: TelegramClient, document: Document) -> matri
print(".", flush=True)
return util.make_sticker(mxc, width, height, len(data))

async def reupload_document_gif(client: TelegramClient, document: Document) -> matrix.StickerInfo:
print(f"Reuploading {document.id}", end="", flush=True)
data = await client.download_media(document, file=bytes)
print(".", end="", flush=True)
# run LottieConverter
convert_data = run(['lottieconverter', '-', '-', 'gif', '512x512', '60'],capture_output = True, input=data).stdout
print(".", end="", flush=True)
mxc = await matrix.upload(convert_data, "image/gif", f"{document.id}.gif")
print(".", flush=True)
# 512x512 is mandatory for all stickers
return util.make_sticker(mxc, 512, 512, len(data), mimetype="image/gif")



def add_meta(document: Document, info: matrix.StickerInfo, pack: StickerSetFull) -> None:
for attr in document.attributes:
Expand All @@ -57,8 +70,7 @@ def add_meta(document: Document, info: matrix.StickerInfo, pack: StickerSetFull)

async def reupload_pack(client: TelegramClient, pack: StickerSetFull, output_dir: str) -> None:
if pack.set.animated:
print("Animated stickerpacks are currently not supported")
return
print("Warning, to convert animated stickers, you need lottieconverter installed")

pack_path = os.path.join(output_dir, f"{pack.set.short_name}.json")
try:
Expand All @@ -85,7 +97,10 @@ async def reupload_pack(client: TelegramClient, pack: StickerSetFull, output_dir
reuploaded_documents[document.id] = already_uploaded[document.id]
print(f"Skipped reuploading {document.id}")
except KeyError:
reuploaded_documents[document.id] = await reupload_document(client, document)
if pack.set.animated:
reuploaded_documents[document.id] = await reupload_document_gif(client,document)
else:
reuploaded_documents[document.id] = await reupload_document(client, document)
# Always ensure the body and telegram metadata is correct
add_meta(document, reuploaded_documents[document.id], pack)

Expand Down
7 changes: 6 additions & 1 deletion sticker/version.py
Original file line number Diff line number Diff line change
@@ -1 +1,6 @@
from .get_version import git_tag, git_revision, version, linkified_version
# Generated in setup.py

git_tag = None
git_revision = 'f59406a4'
version = '0.1.0+dev.f59406a4'
linkified_version = '0.1.0+dev.[f59406a4](https://github.com/maunium/stickerpicker/commit/f59406a47a6778cd402e656ffb64f667335f665a)'