sticker-convert 2.9.0__tar.gz → 2.9.2__tar.gz
Sign up to get free protection for your applications and to get access to all the features.
- {sticker_convert-2.9.0/src/sticker_convert.egg-info → sticker_convert-2.9.2}/PKG-INFO +12 -10
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/README.md +3 -3
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/requirements.txt +8 -6
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/downloaders/download_kakao.py +92 -140
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/gui_components/frames/cred_frame.py +2 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/gui_components/windows/viber_get_auth_window.py +8 -2
- sticker_convert-2.9.2/src/sticker_convert/resources/memdump_windows.ps1 +8 -0
- sticker_convert-2.9.2/src/sticker_convert/utils/auth/get_viber_auth.py +441 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/version.py +1 -1
- {sticker_convert-2.9.0 → sticker_convert-2.9.2/src/sticker_convert.egg-info}/PKG-INFO +12 -10
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert.egg-info/SOURCES.txt +2 -1
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert.egg-info/requires.txt +8 -6
- sticker_convert-2.9.0/src/sticker_convert/utils/auth/get_viber_auth.py +0 -315
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/LICENSE +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/MANIFEST.in +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/pyproject.toml +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/setup.cfg +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/__init__.py +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/__main__.py +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/cli.py +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/converter.py +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/definitions.py +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/downloaders/__init__.py +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/downloaders/download_base.py +2 -2
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/downloaders/download_line.py +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/downloaders/download_signal.py +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/downloaders/download_telegram.py +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/downloaders/download_viber.py +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/gui.py +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/gui_components/__init__.py +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/gui_components/frames/__init__.py +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/gui_components/frames/comp_frame.py +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/gui_components/frames/config_frame.py +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/gui_components/frames/control_frame.py +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/gui_components/frames/input_frame.py +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/gui_components/frames/output_frame.py +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/gui_components/frames/progress_frame.py +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/gui_components/frames/right_clicker.py +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/gui_components/gui_utils.py +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/gui_components/windows/__init__.py +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/gui_components/windows/advanced_compression_window.py +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/gui_components/windows/base_window.py +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/gui_components/windows/kakao_get_auth_window.py +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/gui_components/windows/line_get_auth_window.py +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/gui_components/windows/signal_get_auth_window.py +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/ios-message-stickers-template/.github/FUNDING.yml +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/ios-message-stickers-template/.gitignore +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/ios-message-stickers-template/README.md +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/ios-message-stickers-template/stickers/Info.plist +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Info.plist +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/Contents.json +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/Sticker Pack.stickerpack/Contents.json +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/Sticker Pack.stickerpack/Sticker 1.sticker/Contents.json +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/Sticker Pack.stickerpack/Sticker 1.sticker/Sticker 1.png +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/Sticker Pack.stickerpack/Sticker 2.sticker/Contents.json +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/Sticker Pack.stickerpack/Sticker 2.sticker/Sticker 2.png +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/Sticker Pack.stickerpack/Sticker 3.sticker/Contents.json +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/Sticker Pack.stickerpack/Sticker 3.sticker/Sticker 3.png +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/App-Store-1024x1024pt.png +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Contents.json +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Messages-App-Store-1024x768pt.png +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Messages-iPad-67x50pt@2x.png +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Messages-iPad-Pro-74x55pt@2x.png +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Messages-iPhone-60x45pt@2x.png +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Messages-iPhone-60x45pt@3x.png +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Messages27x20pt@2x.png +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Messages27x20pt@3x.png +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Messages32x24pt@2x.png +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Messages32x24pt@3x.png +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/iPad-Settings-29pt@2x.png +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/iPhone-Settings-29pt@3x.png +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/iPhone-settings-29pt@2x.png +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/ios-message-stickers-template/stickers.xcodeproj/project.pbxproj +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/ios-message-stickers-template/stickers.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/ios-message-stickers-template/stickers.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/ios-message-stickers-template/stickers.xcodeproj/project.xcworkspace/xcuserdata/niklaspeterson.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/ios-message-stickers-template/stickers.xcodeproj/xcuserdata/niklaspeterson.xcuserdatad/xcschemes/xcschememanagement.plist +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/job.py +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/job_option.py +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/resources/NotoColorEmoji.ttf +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/resources/appicon.icns +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/resources/appicon.ico +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/resources/appicon.png +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/resources/compression.json +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/resources/emoji.json +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/resources/help.json +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/resources/input.json +0 -0
- /sticker_convert-2.9.0/src/sticker_convert/resources/memdump.sh → /sticker_convert-2.9.2/src/sticker_convert/resources/memdump_linux.sh +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/resources/output.json +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/uploaders/__init__.py +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/uploaders/compress_wastickers.py +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/uploaders/upload_base.py +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/uploaders/upload_signal.py +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/uploaders/upload_telegram.py +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/uploaders/upload_viber.py +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/uploaders/xcode_imessage.py +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/utils/auth/get_kakao_auth.py +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/utils/auth/get_line_auth.py +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/utils/auth/get_signal_auth.py +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/utils/callback.py +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/utils/files/cache_store.py +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/utils/files/json_manager.py +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/utils/files/json_resources_loader.py +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/utils/files/metadata_handler.py +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/utils/files/run_bin.py +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/utils/files/sanitize_filename.py +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/utils/media/apple_png_normalize.py +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/utils/media/codec_info.py +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/utils/media/decrypt_kakao.py +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/utils/media/format_verify.py +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/utils/url_detect.py +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert.egg-info/dependency_links.txt +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert.egg-info/entry_points.txt +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert.egg-info/top_level.txt +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/tests/test_compression.py +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/tests/test_download.py +0 -0
- {sticker_convert-2.9.0 → sticker_convert-2.9.2}/tests/test_export.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: sticker-convert
|
3
|
-
Version: 2.9.
|
3
|
+
Version: 2.9.2
|
4
4
|
Summary: Convert (animated) stickers to/from WhatsApp, Telegram, Signal, Line, Kakao, Viber, iMessage. Written in Python.
|
5
5
|
Author-email: laggykiller <chaudominic2@gmail.com>
|
6
6
|
Maintainer-email: laggykiller <chaudominic2@gmail.com>
|
@@ -367,20 +367,22 @@ License-File: LICENSE
|
|
367
367
|
Requires-Dist: aiolimiter~=1.1.0
|
368
368
|
Requires-Dist: anyio~=4.4.0
|
369
369
|
Requires-Dist: apngasm_python~=1.3.1
|
370
|
-
Requires-Dist: av~=12.
|
370
|
+
Requires-Dist: av~=12.2.0
|
371
371
|
Requires-Dist: beautifulsoup4~=4.12.3
|
372
|
-
Requires-Dist:
|
372
|
+
Requires-Dist: chromedriver_autoinstaller~=0.6.4
|
373
|
+
Requires-Dist: rookiepy~=0.5.2
|
373
374
|
Requires-Dist: imagequant~=1.1.1
|
374
375
|
Requires-Dist: memory-tempfile~=2.2.3
|
375
376
|
Requires-Dist: mergedeep~=1.3.4
|
376
377
|
Requires-Dist: numpy>=1.22.4
|
377
|
-
Requires-Dist: Pillow~=10.
|
378
|
+
Requires-Dist: Pillow~=10.4.0
|
378
379
|
Requires-Dist: pyoxipng~=9.0.0
|
379
|
-
Requires-Dist: python-telegram-bot~=21.
|
380
|
-
Requires-Dist: psutil~=
|
380
|
+
Requires-Dist: python-telegram-bot~=21.3
|
381
|
+
Requires-Dist: psutil~=6.0.0
|
381
382
|
Requires-Dist: PyMemoryEditor~=1.5.22
|
382
383
|
Requires-Dist: requests~=2.32.3
|
383
|
-
Requires-Dist: rlottie_python~=1.3.
|
384
|
+
Requires-Dist: rlottie_python~=1.3.6
|
385
|
+
Requires-Dist: selenium~=4.22.0
|
384
386
|
Requires-Dist: signalstickers-client-fork-laggykiller~=3.3.0.post2
|
385
387
|
Requires-Dist: sqlcipher3-wheels~=0.5.2.post1
|
386
388
|
Requires-Dist: tqdm~=4.66.4
|
@@ -392,7 +394,7 @@ Requires-Dist: ttkbootstrap-fork-laggykiller~=1.5.1
|
|
392
394
|
|
393
395
|
- A python script for creating, downloading, converting+compressing and uploading stickers from multiple instant messaging applications.
|
394
396
|
- With GUI and CLI that runs on Windows, MacOS and Linux
|
395
|
-
- Currently supports Signal, Telegram, WhatsApp (Create .wastickers), Line (Download only), Kakao (Download only), Viber
|
397
|
+
- Currently supports Signal, Telegram, WhatsApp (Create .wastickers), Line (Download only), Kakao (Download only), Viber, iMessage (Create Xcode sticker pack project)
|
396
398
|
- Supports static and animated stickers, with transparency support
|
397
399
|
|
398
400
|
## Downloads
|
@@ -430,7 +432,7 @@ Requires-Dist: ttkbootstrap-fork-laggykiller~=1.5.1
|
|
430
432
|
| [WhatsApp](docs/guide_whatsapp.md) | ⭕ (By Android or WhatsApp Web) | ⭕ (Create `.wastickers`, import by Sticker Maker) |
|
431
433
|
| [Line](docs/guide_line.md) | ✅ | 🚫 (Need to submit for manual approval) |
|
432
434
|
| [Kakao](docs/guide_kakao.md) | ✅ (Need 'share link' for animated) | 🚫 (Need to submit for manual approval) |
|
433
|
-
| [Viber](docs/guide_viber.md) | ✅ |
|
435
|
+
| [Viber](docs/guide_viber.md) | ✅ | ✅ (Require `viber_auth`) |
|
434
436
|
| [iMessage](docs/guide_imessage.md) | 🚫 | ⭕ (Create Xcode stickerpack project for sideload) |
|
435
437
|
|
436
438
|
✅ = Supported ⭕ = Partially supported 🚫 = Not supported
|
@@ -459,7 +461,7 @@ Requires-Dist: ttkbootstrap-fork-laggykiller~=1.5.1
|
|
459
461
|
- Upload: Not supported. You need to manually submit sticker pack for approval before you can use in app.
|
460
462
|
- Viber
|
461
463
|
- Download: Supported (e.g. `https://stickers.viber.com/pages/example` OR `https://stickers.viber.com/pages/custom-sticker-packs/example`)
|
462
|
-
- Upload:
|
464
|
+
- Upload: Supported. Viber authentication data required for uploading Viber stickers, which could be fetched from Viber Desktop application automatically.
|
463
465
|
- iMessage
|
464
466
|
- Download: Not supported.
|
465
467
|
- Upload: The program can create Xcode project for iMessage sticker pack, which could then be compiled and sideloaded using Xcode.
|
@@ -4,7 +4,7 @@
|
|
4
4
|
|
5
5
|
- A python script for creating, downloading, converting+compressing and uploading stickers from multiple instant messaging applications.
|
6
6
|
- With GUI and CLI that runs on Windows, MacOS and Linux
|
7
|
-
- Currently supports Signal, Telegram, WhatsApp (Create .wastickers), Line (Download only), Kakao (Download only), Viber
|
7
|
+
- Currently supports Signal, Telegram, WhatsApp (Create .wastickers), Line (Download only), Kakao (Download only), Viber, iMessage (Create Xcode sticker pack project)
|
8
8
|
- Supports static and animated stickers, with transparency support
|
9
9
|
|
10
10
|
## Downloads
|
@@ -42,7 +42,7 @@
|
|
42
42
|
| [WhatsApp](docs/guide_whatsapp.md) | ⭕ (By Android or WhatsApp Web) | ⭕ (Create `.wastickers`, import by Sticker Maker) |
|
43
43
|
| [Line](docs/guide_line.md) | ✅ | 🚫 (Need to submit for manual approval) |
|
44
44
|
| [Kakao](docs/guide_kakao.md) | ✅ (Need 'share link' for animated) | 🚫 (Need to submit for manual approval) |
|
45
|
-
| [Viber](docs/guide_viber.md) | ✅ |
|
45
|
+
| [Viber](docs/guide_viber.md) | ✅ | ✅ (Require `viber_auth`) |
|
46
46
|
| [iMessage](docs/guide_imessage.md) | 🚫 | ⭕ (Create Xcode stickerpack project for sideload) |
|
47
47
|
|
48
48
|
✅ = Supported ⭕ = Partially supported 🚫 = Not supported
|
@@ -71,7 +71,7 @@
|
|
71
71
|
- Upload: Not supported. You need to manually submit sticker pack for approval before you can use in app.
|
72
72
|
- Viber
|
73
73
|
- Download: Supported (e.g. `https://stickers.viber.com/pages/example` OR `https://stickers.viber.com/pages/custom-sticker-packs/example`)
|
74
|
-
- Upload:
|
74
|
+
- Upload: Supported. Viber authentication data required for uploading Viber stickers, which could be fetched from Viber Desktop application automatically.
|
75
75
|
- iMessage
|
76
76
|
- Download: Not supported.
|
77
77
|
- Upload: The program can create Xcode project for iMessage sticker pack, which could then be compiled and sideloaded using Xcode.
|
@@ -1,20 +1,22 @@
|
|
1
1
|
aiolimiter~=1.1.0
|
2
2
|
anyio~=4.4.0
|
3
3
|
apngasm_python~=1.3.1
|
4
|
-
av~=12.
|
4
|
+
av~=12.2.0
|
5
5
|
beautifulsoup4~=4.12.3
|
6
|
-
|
6
|
+
chromedriver_autoinstaller~=0.6.4
|
7
|
+
rookiepy~=0.5.2
|
7
8
|
imagequant~=1.1.1
|
8
9
|
memory-tempfile~=2.2.3
|
9
10
|
mergedeep~=1.3.4
|
10
11
|
numpy>=1.22.4
|
11
|
-
Pillow~=10.
|
12
|
+
Pillow~=10.4.0
|
12
13
|
pyoxipng~=9.0.0
|
13
|
-
python-telegram-bot~=21.
|
14
|
-
psutil~=
|
14
|
+
python-telegram-bot~=21.3
|
15
|
+
psutil~=6.0.0
|
15
16
|
PyMemoryEditor~=1.5.22
|
16
17
|
requests~=2.32.3
|
17
|
-
rlottie_python~=1.3.
|
18
|
+
rlottie_python~=1.3.6
|
19
|
+
selenium~=4.22.0
|
18
20
|
signalstickers-client-fork-laggykiller~=3.3.0.post2
|
19
21
|
sqlcipher3-wheels~=0.5.2.post1
|
20
22
|
tqdm~=4.66.4
|
{sticker_convert-2.9.0 → sticker_convert-2.9.2}/src/sticker_convert/downloaders/download_kakao.py
RENAMED
@@ -3,16 +3,20 @@ from __future__ import annotations
|
|
3
3
|
|
4
4
|
import itertools
|
5
5
|
import json
|
6
|
-
import
|
7
|
-
import zipfile
|
8
|
-
from io import BytesIO
|
6
|
+
import webbrowser
|
9
7
|
from pathlib import Path
|
8
|
+
from tempfile import TemporaryDirectory
|
10
9
|
from typing import Any, List, Optional, Tuple, cast
|
11
10
|
from urllib.parse import urlparse
|
12
11
|
|
12
|
+
import chromedriver_autoinstaller # type: ignore
|
13
13
|
import requests
|
14
14
|
from bs4 import BeautifulSoup
|
15
|
-
from
|
15
|
+
from selenium import webdriver
|
16
|
+
from selenium.webdriver.chrome.options import Options
|
17
|
+
from selenium.webdriver.common.by import By
|
18
|
+
from selenium.webdriver.support import expected_conditions as EC
|
19
|
+
from selenium.webdriver.support.wait import WebDriverWait
|
16
20
|
|
17
21
|
from sticker_convert.downloaders.download_base import DownloadBase
|
18
22
|
from sticker_convert.job_option import CredOption
|
@@ -20,94 +24,38 @@ from sticker_convert.utils.callback import CallbackProtocol, CallbackReturn
|
|
20
24
|
from sticker_convert.utils.files.metadata_handler import MetadataHandler
|
21
25
|
from sticker_convert.utils.media.decrypt_kakao import DecryptKakao
|
22
26
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
27
|
+
JSINJECT = """
|
28
|
+
class osclass {
|
29
|
+
android = true;
|
30
|
+
}
|
31
|
+
class uaclass {
|
32
|
+
os = new osclass();
|
33
|
+
}
|
34
|
+
class util {
|
35
|
+
static userAgent() {
|
36
|
+
return new uaclass();
|
37
|
+
}
|
38
|
+
}
|
39
|
+
class daumtools {
|
40
|
+
static web2app(dataDict) {
|
41
|
+
return dataDict['urlScheme'];
|
42
|
+
}
|
43
|
+
}
|
44
|
+
"""
|
45
|
+
|
46
|
+
HTMLPAGE = """
|
47
|
+
<html>
|
48
|
+
<body>
|
49
|
+
<p id="p1"></p>
|
50
|
+
<script>
|
51
|
+
{}
|
52
|
+
</script>
|
53
|
+
</body>
|
54
|
+
</html>
|
55
|
+
"""
|
42
56
|
|
43
57
|
|
44
58
|
class MetadataKakao:
|
45
|
-
@staticmethod
|
46
|
-
def get_info_from_share_link(url: str) -> Tuple[Optional[str], Optional[str]]:
|
47
|
-
headers = {"User-Agent": "Android"}
|
48
|
-
|
49
|
-
response = requests.get(url, headers=headers)
|
50
|
-
soup = BeautifulSoup(response.content.decode("utf-8", "ignore"), "html.parser")
|
51
|
-
|
52
|
-
pack_title_tag = soup.find("title") # type: ignore
|
53
|
-
if not pack_title_tag:
|
54
|
-
return None, None
|
55
|
-
|
56
|
-
pack_title: str = pack_title_tag.string # type: ignore
|
57
|
-
|
58
|
-
app_scheme_link_tag = soup.find("a", id="app_scheme_link") # type: ignore
|
59
|
-
assert isinstance(app_scheme_link_tag, Tag)
|
60
|
-
|
61
|
-
item_code_fake = cast(str, app_scheme_link_tag["data-i"])
|
62
|
-
|
63
|
-
js = ""
|
64
|
-
for script_tag in soup.find_all("script"):
|
65
|
-
js = script_tag.string
|
66
|
-
if js and "emoticonDeepLink" in js:
|
67
|
-
break
|
68
|
-
if "emoticonDeepLink" not in js:
|
69
|
-
return None, None
|
70
|
-
|
71
|
-
func_start_pos = js.find("function emoticonDeepLink(")
|
72
|
-
js = js[func_start_pos:]
|
73
|
-
bracket_start_pos = js.find("{")
|
74
|
-
func_end_pos = search_bracket(js[bracket_start_pos:]) + bracket_start_pos
|
75
|
-
js = js[bracket_start_pos + 1 : func_end_pos]
|
76
|
-
js = js.split(";")[0]
|
77
|
-
|
78
|
-
minus_num_regex = re.search(r"\-(.*?)\^", js)
|
79
|
-
if not minus_num_regex:
|
80
|
-
return None, None
|
81
|
-
minus_num_str = minus_num_regex.group(1)
|
82
|
-
if not minus_num_str.isnumeric():
|
83
|
-
return None, None
|
84
|
-
minus_num = int(minus_num_str)
|
85
|
-
|
86
|
-
xor_num_regex = re.search(r"\^(.*?)\)", js)
|
87
|
-
if not xor_num_regex:
|
88
|
-
return None, None
|
89
|
-
xor_num_str = xor_num_regex.group(1)
|
90
|
-
if not xor_num_str.isnumeric():
|
91
|
-
return None, None
|
92
|
-
xor_num = int(xor_num_str)
|
93
|
-
|
94
|
-
item_code = str(int(item_code_fake) - minus_num ^ xor_num)
|
95
|
-
|
96
|
-
# https://github.com/Nuitka/Nuitka/issues/385
|
97
|
-
# js2py not working if compiled by nuitka
|
98
|
-
# web2app_start_pos = js.find("daumtools.web2app(")
|
99
|
-
# js = js[:web2app_start_pos] + "return a;}"
|
100
|
-
# get_item_code = js2py.eval_js(js) # type: ignore
|
101
|
-
# kakao_scheme_link = cast(
|
102
|
-
# str,
|
103
|
-
# get_item_code(
|
104
|
-
# "kakaotalk://store/emoticon/${i}?referer=share_link", item_code_fake
|
105
|
-
# ),
|
106
|
-
# )
|
107
|
-
# item_code = urlparse(kakao_scheme_link).path.split("/")[-1]
|
108
|
-
|
109
|
-
return pack_title, item_code
|
110
|
-
|
111
59
|
@staticmethod
|
112
60
|
def get_item_code(title_ko: str, auth_token: str) -> Optional[str]:
|
113
61
|
headers = {
|
@@ -177,15 +125,67 @@ class DownloadKakao(DownloadBase):
|
|
177
125
|
self.pack_info_unauthed: Optional[dict[str, Any]] = None
|
178
126
|
self.pack_info_authed: Optional[dict[str, Any]] = None
|
179
127
|
|
128
|
+
def get_info_from_share_link(self, url: str) -> Tuple[Optional[str], Optional[str]]:
|
129
|
+
headers = {"User-Agent": "Android"}
|
130
|
+
|
131
|
+
response = requests.get(url, headers=headers)
|
132
|
+
soup = BeautifulSoup(response.content.decode("utf-8", "ignore"), "html.parser")
|
133
|
+
|
134
|
+
pack_title_tag = soup.find("title") # type: ignore
|
135
|
+
if not pack_title_tag:
|
136
|
+
return None, None
|
137
|
+
|
138
|
+
pack_title: str = pack_title_tag.string # type: ignore
|
139
|
+
|
140
|
+
js = ""
|
141
|
+
for script_tag in soup.find_all("script"):
|
142
|
+
js = script_tag.string
|
143
|
+
if js and "daumtools.web2app" in js:
|
144
|
+
break
|
145
|
+
if "daumtools.web2app" not in js:
|
146
|
+
return None, None
|
147
|
+
|
148
|
+
js = js.replace(
|
149
|
+
"daumtools.web2app",
|
150
|
+
'document.getElementById("p1").innerHTML = daumtools.web2app',
|
151
|
+
)
|
152
|
+
js = JSINJECT + js
|
153
|
+
|
154
|
+
with TemporaryDirectory() as tempdir:
|
155
|
+
html_page_path = Path(tempdir, "page.html")
|
156
|
+
html_page = HTMLPAGE.format(js)
|
157
|
+
with open(html_page_path, "w+") as f:
|
158
|
+
f.write(html_page)
|
159
|
+
|
160
|
+
try:
|
161
|
+
chromedriver_autoinstaller.install()
|
162
|
+
chrome_options = Options()
|
163
|
+
chrome_options.add_argument("--headless") # type: ignore
|
164
|
+
driver = webdriver.Chrome(options=chrome_options)
|
165
|
+
driver.get(html_page_path.as_posix())
|
166
|
+
wait = WebDriverWait(driver, 10)
|
167
|
+
wait.until(EC.text_to_be_present_in_element((By.ID, "p1"), "kakaotalk")) # type: ignore
|
168
|
+
kakao_url_elm = driver.find_element(By.ID, "p1")
|
169
|
+
kakao_url = cast(str, kakao_url_elm.text) # type: ignore
|
170
|
+
driver.close()
|
171
|
+
except ValueError:
|
172
|
+
webbrowser.open(html_page_path.as_posix())
|
173
|
+
prompt = "Chrome not installed, using manual method.\n"
|
174
|
+
prompt += "Please copy and paste the url you see in the browser"
|
175
|
+
self.cb.put(("ask_str", (prompt,), None))
|
176
|
+
kakao_url = cast(str, self.cb_return.get_response())
|
177
|
+
|
178
|
+
item_code = urlparse(kakao_url).path.split("/")[2]
|
179
|
+
|
180
|
+
return pack_title, item_code
|
181
|
+
|
180
182
|
def download_stickers_kakao(self) -> bool:
|
181
183
|
self.auth_token = None
|
182
184
|
if self.opt_cred:
|
183
185
|
self.auth_token = self.opt_cred.kakao_auth_token
|
184
186
|
|
185
187
|
if urlparse(self.url).netloc == "emoticon.kakao.com":
|
186
|
-
self.pack_title, item_code =
|
187
|
-
self.url
|
188
|
-
)
|
188
|
+
self.pack_title, item_code = self.get_info_from_share_link(self.url)
|
189
189
|
|
190
190
|
if item_code:
|
191
191
|
return self.download_animated(item_code)
|
@@ -268,14 +268,6 @@ class DownloadKakao(DownloadBase):
|
|
268
268
|
self.out_dir, title=self.pack_title, author=self.author
|
269
269
|
)
|
270
270
|
|
271
|
-
success = self.download_animated_zip(item_code)
|
272
|
-
if not success:
|
273
|
-
self.cb.put("Trying to download one by one")
|
274
|
-
success = self.download_animated_files(item_code)
|
275
|
-
|
276
|
-
return success
|
277
|
-
|
278
|
-
def download_animated_files(self, item_code: str) -> bool:
|
279
271
|
play_exts = [".webp", ".gif", ".png", ""]
|
280
272
|
play_types = ["emot", "emoji", ""] # emot = normal; emoji = mini
|
281
273
|
play_path_format = None
|
@@ -376,46 +368,6 @@ class DownloadKakao(DownloadBase):
|
|
376
368
|
|
377
369
|
return True
|
378
370
|
|
379
|
-
def download_animated_zip(self, item_code: str) -> bool:
|
380
|
-
pack_url = f"http://item.kakaocdn.net/dw/{item_code}.file_pack.zip"
|
381
|
-
|
382
|
-
zip_file = self.download_file(pack_url)
|
383
|
-
if zip_file:
|
384
|
-
self.cb.put(f"Downloaded {pack_url}")
|
385
|
-
else:
|
386
|
-
self.cb.put(f"Cannot download {pack_url}")
|
387
|
-
return False
|
388
|
-
|
389
|
-
with zipfile.ZipFile(BytesIO(zip_file)) as zf:
|
390
|
-
self.cb.put("Unzipping...")
|
391
|
-
self.cb.put(
|
392
|
-
(
|
393
|
-
"bar",
|
394
|
-
None,
|
395
|
-
{"set_progress_mode": "determinate", "steps": len(zf.namelist())},
|
396
|
-
)
|
397
|
-
)
|
398
|
-
|
399
|
-
for num, f_path in enumerate(sorted(zf.namelist())):
|
400
|
-
ext = Path(f_path).suffix
|
401
|
-
|
402
|
-
if ext in (".gif", ".webp"):
|
403
|
-
data = DecryptKakao.xor_data(zf.read(f_path))
|
404
|
-
self.cb.put(f"Decrypted {f_path}")
|
405
|
-
else:
|
406
|
-
data = zf.read(f_path)
|
407
|
-
self.cb.put(f"Read {f_path}")
|
408
|
-
|
409
|
-
out_path = Path(self.out_dir, str(num).zfill(3) + ext)
|
410
|
-
with open(out_path, "wb") as f:
|
411
|
-
f.write(data)
|
412
|
-
|
413
|
-
self.cb.put("update_bar")
|
414
|
-
|
415
|
-
self.cb.put(f"Finished getting {pack_url}")
|
416
|
-
|
417
|
-
return True
|
418
|
-
|
419
371
|
@staticmethod
|
420
372
|
def start(
|
421
373
|
url: str,
|
@@ -51,11 +51,17 @@ class ViberGetAuthWindow(BaseWindow):
|
|
51
51
|
justify="left",
|
52
52
|
anchor="w",
|
53
53
|
)
|
54
|
+
else:
|
55
|
+
self.explanation_lbl2 = Label(
|
56
|
+
self.frame_info,
|
57
|
+
text="You may be asked for admin password.",
|
58
|
+
justify="left",
|
59
|
+
anchor="w",
|
60
|
+
)
|
54
61
|
|
55
62
|
self.explanation_lbl0.grid(column=0, row=0, sticky="w", padx=3, pady=3)
|
56
63
|
self.explanation_lbl1.grid(column=0, row=1, sticky="w", padx=3, pady=3)
|
57
|
-
|
58
|
-
self.explanation_lbl2.grid(column=0, row=2, sticky="w", padx=3, pady=3)
|
64
|
+
self.explanation_lbl2.grid(column=0, row=2, sticky="w", padx=3, pady=3)
|
59
65
|
|
60
66
|
# Start button frame
|
61
67
|
self.launch_btn = Button(
|
@@ -0,0 +1,8 @@
|
|
1
|
+
param($processId)
|
2
|
+
$dumpFilePath = "$Env:TEMP\memdump.bin.$processId"
|
3
|
+
|
4
|
+
Powershell -c rundll32.exe C:\Windows\System32\comsvcs.dll, MiniDump $processId $dumpFilePath full
|
5
|
+
|
6
|
+
icacls $dumpFilePath /remove "Everyone"
|
7
|
+
icacls $dumpFilePath /grant "Everyone:(r)"
|
8
|
+
icacls $dumpFilePath /grant "Everyone:(w)"
|