sticker-convert 2.10.8__tar.gz → 2.11.0__tar.gz

Sign up to get free protection for your applications and to get access to all the features.
Files changed (127) hide show
  1. {sticker_convert-2.10.8/src/sticker_convert.egg-info → sticker_convert-2.11.0}/PKG-INFO +54 -36
  2. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/README.md +45 -29
  3. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/requirements.txt +8 -6
  4. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/cli.py +39 -1
  5. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/converter.py +10 -6
  6. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/downloaders/download_base.py +37 -17
  7. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/downloaders/download_discord.py +6 -6
  8. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/downloaders/download_kakao.py +31 -13
  9. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/downloaders/download_line.py +6 -6
  10. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/downloaders/download_signal.py +10 -8
  11. sticker_convert-2.11.0/src/sticker_convert/downloaders/download_telegram.py +55 -0
  12. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/downloaders/download_viber.py +8 -6
  13. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/gui.py +12 -0
  14. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/gui_components/frames/cred_frame.py +38 -13
  15. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/job.py +84 -63
  16. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/job_option.py +6 -0
  17. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/resources/compression.json +2 -2
  18. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/resources/help.json +3 -2
  19. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/resources/input.json +10 -0
  20. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/resources/output.json +16 -0
  21. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/uploaders/compress_wastickers.py +8 -6
  22. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/uploaders/upload_signal.py +10 -6
  23. sticker_convert-2.11.0/src/sticker_convert/uploaders/upload_telegram.py +329 -0
  24. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/uploaders/upload_viber.py +12 -8
  25. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/uploaders/xcode_imessage.py +8 -6
  26. sticker_convert-2.11.0/src/sticker_convert/utils/auth/telegram_api.py +668 -0
  27. sticker_convert-2.11.0/src/sticker_convert/utils/auth/telethon_setup.py +79 -0
  28. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/utils/url_detect.py +1 -1
  29. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/version.py +1 -1
  30. {sticker_convert-2.10.8 → sticker_convert-2.11.0/src/sticker_convert.egg-info}/PKG-INFO +54 -36
  31. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert.egg-info/SOURCES.txt +2 -0
  32. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert.egg-info/requires.txt +8 -6
  33. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/tests/test_download.py +30 -25
  34. sticker_convert-2.10.8/src/sticker_convert/downloaders/download_telegram.py +0 -129
  35. sticker_convert-2.10.8/src/sticker_convert/uploaders/upload_telegram.py +0 -382
  36. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/LICENSE +0 -0
  37. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/MANIFEST.in +0 -0
  38. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/pyproject.toml +0 -0
  39. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/setup.cfg +0 -0
  40. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/__init__.py +0 -0
  41. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/__main__.py +0 -0
  42. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/definitions.py +0 -0
  43. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/downloaders/__init__.py +0 -0
  44. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/gui_components/__init__.py +0 -0
  45. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/gui_components/frames/__init__.py +0 -0
  46. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/gui_components/frames/comp_frame.py +0 -0
  47. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/gui_components/frames/config_frame.py +0 -0
  48. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/gui_components/frames/control_frame.py +0 -0
  49. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/gui_components/frames/input_frame.py +0 -0
  50. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/gui_components/frames/output_frame.py +0 -0
  51. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/gui_components/frames/progress_frame.py +0 -0
  52. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/gui_components/frames/right_clicker.py +0 -0
  53. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/gui_components/gui_utils.py +0 -0
  54. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/gui_components/windows/__init__.py +0 -0
  55. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/gui_components/windows/advanced_compression_window.py +0 -0
  56. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/gui_components/windows/base_window.py +0 -0
  57. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/gui_components/windows/discord_get_auth_window.py +0 -0
  58. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/gui_components/windows/kakao_get_auth_window.py +0 -0
  59. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/gui_components/windows/line_get_auth_window.py +0 -0
  60. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/gui_components/windows/signal_get_auth_window.py +0 -0
  61. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/gui_components/windows/viber_get_auth_window.py +0 -0
  62. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/ios-message-stickers-template/.github/FUNDING.yml +0 -0
  63. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/ios-message-stickers-template/.gitignore +0 -0
  64. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/ios-message-stickers-template/README.md +0 -0
  65. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/ios-message-stickers-template/stickers/Info.plist +0 -0
  66. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Info.plist +0 -0
  67. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/Contents.json +0 -0
  68. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/Sticker Pack.stickerpack/Contents.json +0 -0
  69. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/Sticker Pack.stickerpack/Sticker 1.sticker/Contents.json +0 -0
  70. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/Sticker Pack.stickerpack/Sticker 1.sticker/Sticker 1.png +0 -0
  71. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/Sticker Pack.stickerpack/Sticker 2.sticker/Contents.json +0 -0
  72. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/Sticker Pack.stickerpack/Sticker 2.sticker/Sticker 2.png +0 -0
  73. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/Sticker Pack.stickerpack/Sticker 3.sticker/Contents.json +0 -0
  74. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/Sticker Pack.stickerpack/Sticker 3.sticker/Sticker 3.png +0 -0
  75. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/App-Store-1024x1024pt.png +0 -0
  76. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Contents.json +0 -0
  77. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Messages-App-Store-1024x768pt.png +0 -0
  78. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Messages-iPad-67x50pt@2x.png +0 -0
  79. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Messages-iPad-Pro-74x55pt@2x.png +0 -0
  80. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Messages-iPhone-60x45pt@2x.png +0 -0
  81. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Messages-iPhone-60x45pt@3x.png +0 -0
  82. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Messages27x20pt@2x.png +0 -0
  83. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Messages27x20pt@3x.png +0 -0
  84. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Messages32x24pt@2x.png +0 -0
  85. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Messages32x24pt@3x.png +0 -0
  86. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/iPad-Settings-29pt@2x.png +0 -0
  87. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/iPhone-Settings-29pt@3x.png +0 -0
  88. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/iPhone-settings-29pt@2x.png +0 -0
  89. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/ios-message-stickers-template/stickers.xcodeproj/project.pbxproj +0 -0
  90. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/ios-message-stickers-template/stickers.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -0
  91. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/ios-message-stickers-template/stickers.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -0
  92. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/ios-message-stickers-template/stickers.xcodeproj/project.xcworkspace/xcuserdata/niklaspeterson.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  93. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/ios-message-stickers-template/stickers.xcodeproj/xcuserdata/niklaspeterson.xcuserdatad/xcschemes/xcschememanagement.plist +0 -0
  94. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/resources/NotoColorEmoji.ttf +0 -0
  95. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/resources/appicon.icns +0 -0
  96. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/resources/appicon.ico +0 -0
  97. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/resources/appicon.png +0 -0
  98. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/resources/emoji.json +0 -0
  99. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/resources/memdump_linux.sh +0 -0
  100. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/resources/memdump_windows.ps1 +0 -0
  101. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/uploaders/__init__.py +0 -0
  102. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/uploaders/upload_base.py +0 -0
  103. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/utils/auth/get_discord_auth.py +0 -0
  104. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/utils/auth/get_kakao_auth.py +0 -0
  105. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/utils/auth/get_kakao_desktop_auth.py +0 -0
  106. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/utils/auth/get_line_auth.py +0 -0
  107. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/utils/auth/get_signal_auth.py +0 -0
  108. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/utils/auth/get_viber_auth.py +0 -0
  109. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/utils/callback.py +0 -0
  110. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/utils/chrome_remotedebug.py +0 -0
  111. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/utils/emoji.py +0 -0
  112. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/utils/files/cache_store.py +0 -0
  113. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/utils/files/json_manager.py +0 -0
  114. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/utils/files/json_resources_loader.py +0 -0
  115. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/utils/files/metadata_handler.py +0 -0
  116. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/utils/files/run_bin.py +0 -0
  117. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/utils/files/sanitize_filename.py +0 -0
  118. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/utils/media/apple_png_normalize.py +0 -0
  119. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/utils/media/codec_info.py +0 -0
  120. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/utils/media/decrypt_kakao.py +0 -0
  121. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/utils/media/format_verify.py +0 -0
  122. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert/utils/process.py +0 -0
  123. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert.egg-info/dependency_links.txt +0 -0
  124. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert.egg-info/entry_points.txt +0 -0
  125. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/src/sticker_convert.egg-info/top_level.txt +0 -0
  126. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/tests/test_compression.py +0 -0
  127. {sticker_convert-2.10.8 → sticker_convert-2.11.0}/tests/test_export.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: sticker-convert
3
- Version: 2.10.8
3
+ Version: 2.11.0
4
4
  Summary: Convert (animated) stickers to/from WhatsApp, Telegram, Signal, Line, Kakao, Viber, Discord, iMessage. Written in Python.
5
5
  Author-email: laggykiller <chaudominic2@gmail.com>
6
6
  Maintainer-email: laggykiller <chaudominic2@gmail.com>
@@ -363,26 +363,28 @@ Classifier: Programming Language :: Python :: 3 :: Only
363
363
  Requires-Python: >=3.9
364
364
  Description-Content-Type: text/markdown
365
365
  License-File: LICENSE
366
- Requires-Dist: aiolimiter~=1.2.0
367
- Requires-Dist: anyio~=4.6.2.post1
366
+ Requires-Dist: aiolimiter~=1.2.1
367
+ Requires-Dist: anyio~=4.7.0
368
368
  Requires-Dist: apngasm_python~=1.3.1
369
369
  Requires-Dist: av~=13.1.0
370
370
  Requires-Dist: beautifulsoup4~=4.12.3
371
+ Requires-Dist: cryptg~=0.5.0.post0
371
372
  Requires-Dist: rookiepy~=0.5.6
372
- Requires-Dist: httpx~=0.28.0
373
+ Requires-Dist: httpx~=0.28.1
373
374
  Requires-Dist: imagequant~=1.1.3
374
375
  Requires-Dist: memory-tempfile~=2.2.3
375
376
  Requires-Dist: mergedeep~=1.3.4
376
377
  Requires-Dist: mini-racer~=0.12.4
377
378
  Requires-Dist: numpy>=1.22.4
378
- Requires-Dist: Pillow~=11.0.0
379
+ Requires-Dist: Pillow~=10.4.0
379
380
  Requires-Dist: pyoxipng~=9.0.0
380
- Requires-Dist: python-telegram-bot~=21.8
381
- Requires-Dist: psutil~=6.1.0
381
+ Requires-Dist: python-telegram-bot~=21.9
382
+ Requires-Dist: psutil~=6.1.1
382
383
  Requires-Dist: PyMemoryEditor~=1.5.22
383
384
  Requires-Dist: requests~=2.32.3
384
385
  Requires-Dist: rlottie_python~=1.3.6
385
386
  Requires-Dist: signalstickers-client-fork-laggykiller~=3.3.0.post2
387
+ Requires-Dist: telethon~=1.38.1
386
388
  Requires-Dist: tqdm~=4.67.1
387
389
  Requires-Dist: ttkbootstrap-fork-laggykiller~=1.5.1
388
390
  Requires-Dist: websocket_client~=1.8.0
@@ -424,16 +426,16 @@ Requires-Dist: websocket_client~=1.8.0
424
426
  - [DISCLAIMER](#disclaimer)
425
427
 
426
428
  ## Compatibility
427
- | Application | ⬇️ Download | ⬆️ Upload |
428
- | ------------------------------------- | ------------------------------------| --------------------------------------------------- |
429
- | [Signal](docs/guide_signal.md) | ✅ | ✅ (Require `uuid` & `password` or manually) |
430
- | [Telegram](docs/guide_telegram.md) | ✅ (Require `token`) | ✅ (Require `token` & `user_id` or manually) |
431
- | [WhatsApp](docs/guide_whatsapp.md) | ⭕ (By Android or WhatsApp Web) | ⭕ (Create `.wastickers`, import by Sticker Maker) |
432
- | [Line](docs/guide_line.md) | ✅ | 🚫 (Need to submit for manual approval) |
433
- | [Kakao](docs/guide_kakao.md) | ✅ (Need 'share link' for animated) | 🚫 (Need to submit for manual approval) |
434
- | [Viber](docs/guide_viber.md) | ✅ | ✅ (Require `viber_auth`) |
435
- | [Discord](docs/guide_discord.md) | ✅ (Require `token`) | 🚫 |
436
- | [iMessage](docs/guide_imessage.md) | 🚫 | ⭕ (Create Xcode stickerpack project for sideload) |
429
+ | Application | ⬇️ Download | ⬆️ Upload |
430
+ | ------------------------------------- | ------------------------------------| --------------------------------------------------------- |
431
+ | [Signal](docs/guide_signal.md) | ✅ | ✅ (Require `uuid` & `password` or manually) |
432
+ | [Telegram](docs/guide_telegram.md) | ✅ (Require `token` or telethon) | ✅ (Require `token` & `user_id` or telethon or manually) |
433
+ | [WhatsApp](docs/guide_whatsapp.md) | ⭕ (By Android or WhatsApp Web) | ⭕ (Create `.wastickers`, import by Sticker Maker) |
434
+ | [Line](docs/guide_line.md) | ✅ | 🚫 (Need to submit for manual approval) |
435
+ | [Kakao](docs/guide_kakao.md) | ✅ (Need 'share link' for animated) | 🚫 (Need to submit for manual approval) |
436
+ | [Viber](docs/guide_viber.md) | ✅ | ✅ (Require `viber_auth`) |
437
+ | [Discord](docs/guide_discord.md) | ✅ (Require `token`) | 🚫 |
438
+ | [iMessage](docs/guide_imessage.md) | 🚫 | ⭕ (Create Xcode stickerpack project for sideload) |
437
439
 
438
440
  ✅ = Supported ⭕ = Partially supported 🚫 = Not supported
439
441
 
@@ -443,8 +445,8 @@ Requires-Dist: websocket_client~=1.8.0
443
445
  - `uuid` and `password` are needed if you want to automatically upload the pack with the program. View FAQ for more information.
444
446
  - Alternatively, you may use Signal Desktop to manually upload and create sticker pack with the output of this prorgam.
445
447
  - Telegram
446
- - Download: Supported (e.g. `https://telegram.me/addstickers/xxxxx`) for both stickers and custom emoji, but require bot token.
447
- - Upload: Supported for both stickers and custom emoji, but require bot token and user_id. Alternatively, you may manually upload and create sticker pack with the output of this program.
448
+ - Download: Supported (e.g. `https://telegram.me/addstickers/xxxxx`) for both stickers and custom emoji, but require bot token or setup Telethon
449
+ - Upload: Supported for both stickers and custom emoji, but require bot token and user_id or setup Telethon. Alternatively, you may manually upload and create sticker pack with the output of this program.
448
450
  - WhatsApp
449
451
  - Download: You have to manually find sticker packs / extract from your phone or from WhatsApp Web.
450
452
  - Android Phone: Inside `/storage/emulated/0/Whatsapp/media/Whatsapp Stickers` OR `/storage/emulated/0/Android/media/com.whatsapp/WhatsApp/Media/WhatsApp Stickers`
@@ -485,22 +487,30 @@ Requires-Dist: websocket_client~=1.8.0
485
487
  To run in CLI mode, pass on any arguments
486
488
 
487
489
  ```
488
- usage: sticker-convert.py [-h] [--version] [--no-confirm] [--no-progress] [--custom-presets CUSTOM_PRESETS] [--input-dir INPUT_DIR]
489
- [--download-auto DOWNLOAD_AUTO | --download-signal DOWNLOAD_SIGNAL | --download-telegram DOWNLOAD_TELEGRAM | --download-line DOWNLOAD_LINE | --download-kakao DOWNLOAD_KAKAO | --download-viber DOWNLOAD_VIBER | --download-discord DOWNLOAD_DISCORD | --download-discord-emoji DOWNLOAD_DISCORD_EMOJI]
490
+ usage: sticker-convert.py [-h] [--version] [--no-confirm] [--no-progress] [--custom-presets CUSTOM_PRESETS]
491
+ [--input-dir INPUT_DIR]
492
+ [--download-auto DOWNLOAD_AUTO | --download-signal DOWNLOAD_SIGNAL | --download-telegram DOWNLOAD_TELEGRAM | --download-telegram-telethon DOWNLOAD_TELEGRAM_TELETHON | --download-line DOWNLOAD_LINE | --download-kakao DOWNLOAD_KAKAO | --download-viber DOWNLOAD_VIBER | --download-discord DOWNLOAD_DISCORD | --download-discord-emoji DOWNLOAD_DISCORD_EMOJI]
490
493
  [--output-dir OUTPUT_DIR] [--author AUTHOR] [--title TITLE]
491
- [--export-signal | --export-telegram | --export-telegram-emoji | --export-viber | --export-whatsapp | --export-imessage] [--no-compress]
494
+ [--export-signal | --export-telegram | --export-telegram-emoji | --export-telegram-telethon | --export-telegram-emoji-telethon | --export-viber | --export-whatsapp | --export-imessage]
495
+ [--no-compress]
492
496
  [--preset {auto,signal,telegram,telegram_emoji,whatsapp,line,kakao,viber,discord,discord_emoji,imessage_small,imessage_medium,imessage_large,custom}]
493
- [--steps STEPS] [--processes PROCESSES] [--fps-min FPS_MIN] [--fps-max FPS_MAX] [--fps-power FPS_POWER] [--res-min RES_MIN] [--res-max RES_MAX]
494
- [--res-w-min RES_W_MIN] [--res-w-max RES_W_MAX] [--res-h-min RES_H_MIN] [--res-h-max RES_H_MAX] [--res-power RES_POWER]
495
- [--quality-min QUALITY_MIN] [--quality-max QUALITY_MAX] [--quality-power QUALITY_POWER] [--color-min COLOR_MIN] [--color-max COLOR_MAX]
496
- [--color-power COLOR_POWER] [--duration-min DURATION_MIN] [--duration-max DURATION_MAX] [--padding-percent PADDING_PERCENT]
497
- [--bg-color BG_COLOR] [--vid-size-max VID_SIZE_MAX] [--img-size-max IMG_SIZE_MAX] [--vid-format VID_FORMAT] [--img-format IMG_FORMAT]
498
- [--fake-vid] [--scale-filter SCALE_FILTER] [--quantize-method QUANTIZE_METHOD] [--cache-dir CACHE_DIR] [--default-emoji DEFAULT_EMOJI]
499
- [--signal-uuid SIGNAL_UUID] [--signal-password SIGNAL_PASSWORD] [--signal-get-auth] [--telegram-token TELEGRAM_TOKEN]
500
- [--telegram-userid TELEGRAM_USERID] [--kakao-auth-token KAKAO_AUTH_TOKEN] [--kakao-get-auth] [--kakao-get-auth-desktop]
501
- [--kakao-bin-path KAKAO_BIN_PATH] [--kakao-username KAKAO_USERNAME] [--kakao-password KAKAO_PASSWORD] [--kakao-country-code KAKAO_COUNTRY_CODE]
502
- [--kakao-phone-number KAKAO_PHONE_NUMBER] [--line-get-auth] [--line-cookies LINE_COOKIES] [--viber-auth VIBER_AUTH]
503
- [--viber-get-auth VIBER_GET_AUTH] [--viber-bin-path VIBER_BIN_PATH] [--discord-get-auth] [--discord-token DISCORD_TOKEN] [--save-cred SAVE_CRED]
497
+ [--steps STEPS] [--processes PROCESSES] [--fps-min FPS_MIN] [--fps-max FPS_MAX]
498
+ [--fps-power FPS_POWER] [--res-min RES_MIN] [--res-max RES_MAX] [--res-w-min RES_W_MIN]
499
+ [--res-w-max RES_W_MAX] [--res-h-min RES_H_MIN] [--res-h-max RES_H_MAX] [--res-power RES_POWER]
500
+ [--quality-min QUALITY_MIN] [--quality-max QUALITY_MAX] [--quality-power QUALITY_POWER]
501
+ [--color-min COLOR_MIN] [--color-max COLOR_MAX] [--color-power COLOR_POWER]
502
+ [--duration-min DURATION_MIN] [--duration-max DURATION_MAX] [--padding-percent PADDING_PERCENT]
503
+ [--bg-color BG_COLOR] [--vid-size-max VID_SIZE_MAX] [--img-size-max IMG_SIZE_MAX]
504
+ [--vid-format VID_FORMAT] [--img-format IMG_FORMAT] [--fake-vid] [--scale-filter SCALE_FILTER]
505
+ [--quantize-method QUANTIZE_METHOD] [--cache-dir CACHE_DIR] [--default-emoji DEFAULT_EMOJI]
506
+ [--signal-uuid SIGNAL_UUID] [--signal-password SIGNAL_PASSWORD] [--signal-get-auth]
507
+ [--telegram-token TELEGRAM_TOKEN] [--telegram-userid TELEGRAM_USERID] [--telethon-setup]
508
+ [--kakao-auth-token KAKAO_AUTH_TOKEN] [--kakao-get-auth] [--kakao-get-auth-desktop]
509
+ [--kakao-bin-path KAKAO_BIN_PATH] [--kakao-username KAKAO_USERNAME]
510
+ [--kakao-password KAKAO_PASSWORD] [--kakao-country-code KAKAO_COUNTRY_CODE]
511
+ [--kakao-phone-number KAKAO_PHONE_NUMBER] [--line-get-auth] [--line-cookies LINE_COOKIES]
512
+ [--viber-auth VIBER_AUTH] [--viber-get-auth VIBER_GET_AUTH] [--viber-bin-path VIBER_BIN_PATH]
513
+ [--discord-get-auth] [--discord-token DISCORD_TOKEN] [--save-cred]
504
514
 
505
515
  CLI for stickers-convert
506
516
 
@@ -527,6 +537,10 @@ Input options:
527
537
  Download telegram stickers from a URL as input
528
538
  (Example: https://telegram.me/addstickers/xxxxx
529
539
  OR https://telegram.me/addemoji/xxxxx)
540
+ --download-telegram-telethon DOWNLOAD_TELEGRAM_TELETHON
541
+ Download telegram stickers from a URL as input with Telethon
542
+ (Example: https://telegram.me/addstickers/xxxxx
543
+ OR https://telegram.me/addemoji/xxxxx)
530
544
  --download-line DOWNLOAD_LINE
531
545
  Download line stickers from a URL / ID as input
532
546
  (Example: https://store.line.me/stickershop/product/1234/en
@@ -557,6 +571,10 @@ Output options:
557
571
  --export-telegram Upload to Telegram
558
572
  --export-telegram-emoji
559
573
  Upload to Telegram (Custom emoji)
574
+ --export-telegram-telethon
575
+ Upload to Telegram with Telethon *Not recommended, but allow link not end with _by_xxxbot*
576
+ --export-telegram-emoji-telethon
577
+ Upload to Telegram with Telethon (Custom emoji) *Not recommended, but allow link not end with _by_xxxbot*
560
578
  --export-viber Upload to Viber
561
579
  --export-whatsapp Create a .wastickers file for uploading to WhatsApp
562
580
  --export-imessage Create Xcode project for importing to iMessage
@@ -650,7 +668,8 @@ Credentials options:
650
668
  --telegram-token TELEGRAM_TOKEN
651
669
  Set Telegram token. Required for uploading and downloading Telegram stickers.
652
670
  --telegram-userid TELEGRAM_USERID
653
- Set telegram user_id (From real account, not bot account). Required for uploading Telegram stickers.
671
+ Set Telegram user_id (From real account, not bot account). Required for uploading Telegram stickers.
672
+ --telethon-setup Setup Telethon
654
673
  --kakao-auth-token KAKAO_AUTH_TOKEN
655
674
  Set Kakao auth_token. Required for downloading animated stickers from https://e.kakao.com/t/xxxxx
656
675
  --kakao-get-auth Generate Kakao auth_token by simulating login. Kakao username, password, country code and phone number are also required.
@@ -691,8 +710,7 @@ Credentials options:
691
710
  --discord-get-auth Get Discord token.
692
711
  --discord-token DISCORD_TOKEN
693
712
  Set Discord token. Required for downloading Discord stickers and emojis.
694
- --save-cred SAVE_CRED
695
- Save Signal and Telegram credentials.
713
+ --save-cred Save credentials.
696
714
  ```
697
715
 
698
716
  If you are running python script directly, run with `src/sticker-convert.py`
@@ -35,16 +35,16 @@
35
35
  - [DISCLAIMER](#disclaimer)
36
36
 
37
37
  ## Compatibility
38
- | Application | ⬇️ Download | ⬆️ Upload |
39
- | ------------------------------------- | ------------------------------------| --------------------------------------------------- |
40
- | [Signal](docs/guide_signal.md) | ✅ | ✅ (Require `uuid` & `password` or manually) |
41
- | [Telegram](docs/guide_telegram.md) | ✅ (Require `token`) | ✅ (Require `token` & `user_id` or manually) |
42
- | [WhatsApp](docs/guide_whatsapp.md) | ⭕ (By Android or WhatsApp Web) | ⭕ (Create `.wastickers`, import by Sticker Maker) |
43
- | [Line](docs/guide_line.md) | ✅ | 🚫 (Need to submit for manual approval) |
44
- | [Kakao](docs/guide_kakao.md) | ✅ (Need 'share link' for animated) | 🚫 (Need to submit for manual approval) |
45
- | [Viber](docs/guide_viber.md) | ✅ | ✅ (Require `viber_auth`) |
46
- | [Discord](docs/guide_discord.md) | ✅ (Require `token`) | 🚫 |
47
- | [iMessage](docs/guide_imessage.md) | 🚫 | ⭕ (Create Xcode stickerpack project for sideload) |
38
+ | Application | ⬇️ Download | ⬆️ Upload |
39
+ | ------------------------------------- | ------------------------------------| --------------------------------------------------------- |
40
+ | [Signal](docs/guide_signal.md) | ✅ | ✅ (Require `uuid` & `password` or manually) |
41
+ | [Telegram](docs/guide_telegram.md) | ✅ (Require `token` or telethon) | ✅ (Require `token` & `user_id` or telethon or manually) |
42
+ | [WhatsApp](docs/guide_whatsapp.md) | ⭕ (By Android or WhatsApp Web) | ⭕ (Create `.wastickers`, import by Sticker Maker) |
43
+ | [Line](docs/guide_line.md) | ✅ | 🚫 (Need to submit for manual approval) |
44
+ | [Kakao](docs/guide_kakao.md) | ✅ (Need 'share link' for animated) | 🚫 (Need to submit for manual approval) |
45
+ | [Viber](docs/guide_viber.md) | ✅ | ✅ (Require `viber_auth`) |
46
+ | [Discord](docs/guide_discord.md) | ✅ (Require `token`) | 🚫 |
47
+ | [iMessage](docs/guide_imessage.md) | 🚫 | ⭕ (Create Xcode stickerpack project for sideload) |
48
48
 
49
49
  ✅ = Supported ⭕ = Partially supported 🚫 = Not supported
50
50
 
@@ -54,8 +54,8 @@
54
54
  - `uuid` and `password` are needed if you want to automatically upload the pack with the program. View FAQ for more information.
55
55
  - Alternatively, you may use Signal Desktop to manually upload and create sticker pack with the output of this prorgam.
56
56
  - Telegram
57
- - Download: Supported (e.g. `https://telegram.me/addstickers/xxxxx`) for both stickers and custom emoji, but require bot token.
58
- - Upload: Supported for both stickers and custom emoji, but require bot token and user_id. Alternatively, you may manually upload and create sticker pack with the output of this program.
57
+ - Download: Supported (e.g. `https://telegram.me/addstickers/xxxxx`) for both stickers and custom emoji, but require bot token or setup Telethon
58
+ - Upload: Supported for both stickers and custom emoji, but require bot token and user_id or setup Telethon. Alternatively, you may manually upload and create sticker pack with the output of this program.
59
59
  - WhatsApp
60
60
  - Download: You have to manually find sticker packs / extract from your phone or from WhatsApp Web.
61
61
  - Android Phone: Inside `/storage/emulated/0/Whatsapp/media/Whatsapp Stickers` OR `/storage/emulated/0/Android/media/com.whatsapp/WhatsApp/Media/WhatsApp Stickers`
@@ -96,22 +96,30 @@
96
96
  To run in CLI mode, pass on any arguments
97
97
 
98
98
  ```
99
- usage: sticker-convert.py [-h] [--version] [--no-confirm] [--no-progress] [--custom-presets CUSTOM_PRESETS] [--input-dir INPUT_DIR]
100
- [--download-auto DOWNLOAD_AUTO | --download-signal DOWNLOAD_SIGNAL | --download-telegram DOWNLOAD_TELEGRAM | --download-line DOWNLOAD_LINE | --download-kakao DOWNLOAD_KAKAO | --download-viber DOWNLOAD_VIBER | --download-discord DOWNLOAD_DISCORD | --download-discord-emoji DOWNLOAD_DISCORD_EMOJI]
99
+ usage: sticker-convert.py [-h] [--version] [--no-confirm] [--no-progress] [--custom-presets CUSTOM_PRESETS]
100
+ [--input-dir INPUT_DIR]
101
+ [--download-auto DOWNLOAD_AUTO | --download-signal DOWNLOAD_SIGNAL | --download-telegram DOWNLOAD_TELEGRAM | --download-telegram-telethon DOWNLOAD_TELEGRAM_TELETHON | --download-line DOWNLOAD_LINE | --download-kakao DOWNLOAD_KAKAO | --download-viber DOWNLOAD_VIBER | --download-discord DOWNLOAD_DISCORD | --download-discord-emoji DOWNLOAD_DISCORD_EMOJI]
101
102
  [--output-dir OUTPUT_DIR] [--author AUTHOR] [--title TITLE]
102
- [--export-signal | --export-telegram | --export-telegram-emoji | --export-viber | --export-whatsapp | --export-imessage] [--no-compress]
103
+ [--export-signal | --export-telegram | --export-telegram-emoji | --export-telegram-telethon | --export-telegram-emoji-telethon | --export-viber | --export-whatsapp | --export-imessage]
104
+ [--no-compress]
103
105
  [--preset {auto,signal,telegram,telegram_emoji,whatsapp,line,kakao,viber,discord,discord_emoji,imessage_small,imessage_medium,imessage_large,custom}]
104
- [--steps STEPS] [--processes PROCESSES] [--fps-min FPS_MIN] [--fps-max FPS_MAX] [--fps-power FPS_POWER] [--res-min RES_MIN] [--res-max RES_MAX]
105
- [--res-w-min RES_W_MIN] [--res-w-max RES_W_MAX] [--res-h-min RES_H_MIN] [--res-h-max RES_H_MAX] [--res-power RES_POWER]
106
- [--quality-min QUALITY_MIN] [--quality-max QUALITY_MAX] [--quality-power QUALITY_POWER] [--color-min COLOR_MIN] [--color-max COLOR_MAX]
107
- [--color-power COLOR_POWER] [--duration-min DURATION_MIN] [--duration-max DURATION_MAX] [--padding-percent PADDING_PERCENT]
108
- [--bg-color BG_COLOR] [--vid-size-max VID_SIZE_MAX] [--img-size-max IMG_SIZE_MAX] [--vid-format VID_FORMAT] [--img-format IMG_FORMAT]
109
- [--fake-vid] [--scale-filter SCALE_FILTER] [--quantize-method QUANTIZE_METHOD] [--cache-dir CACHE_DIR] [--default-emoji DEFAULT_EMOJI]
110
- [--signal-uuid SIGNAL_UUID] [--signal-password SIGNAL_PASSWORD] [--signal-get-auth] [--telegram-token TELEGRAM_TOKEN]
111
- [--telegram-userid TELEGRAM_USERID] [--kakao-auth-token KAKAO_AUTH_TOKEN] [--kakao-get-auth] [--kakao-get-auth-desktop]
112
- [--kakao-bin-path KAKAO_BIN_PATH] [--kakao-username KAKAO_USERNAME] [--kakao-password KAKAO_PASSWORD] [--kakao-country-code KAKAO_COUNTRY_CODE]
113
- [--kakao-phone-number KAKAO_PHONE_NUMBER] [--line-get-auth] [--line-cookies LINE_COOKIES] [--viber-auth VIBER_AUTH]
114
- [--viber-get-auth VIBER_GET_AUTH] [--viber-bin-path VIBER_BIN_PATH] [--discord-get-auth] [--discord-token DISCORD_TOKEN] [--save-cred SAVE_CRED]
106
+ [--steps STEPS] [--processes PROCESSES] [--fps-min FPS_MIN] [--fps-max FPS_MAX]
107
+ [--fps-power FPS_POWER] [--res-min RES_MIN] [--res-max RES_MAX] [--res-w-min RES_W_MIN]
108
+ [--res-w-max RES_W_MAX] [--res-h-min RES_H_MIN] [--res-h-max RES_H_MAX] [--res-power RES_POWER]
109
+ [--quality-min QUALITY_MIN] [--quality-max QUALITY_MAX] [--quality-power QUALITY_POWER]
110
+ [--color-min COLOR_MIN] [--color-max COLOR_MAX] [--color-power COLOR_POWER]
111
+ [--duration-min DURATION_MIN] [--duration-max DURATION_MAX] [--padding-percent PADDING_PERCENT]
112
+ [--bg-color BG_COLOR] [--vid-size-max VID_SIZE_MAX] [--img-size-max IMG_SIZE_MAX]
113
+ [--vid-format VID_FORMAT] [--img-format IMG_FORMAT] [--fake-vid] [--scale-filter SCALE_FILTER]
114
+ [--quantize-method QUANTIZE_METHOD] [--cache-dir CACHE_DIR] [--default-emoji DEFAULT_EMOJI]
115
+ [--signal-uuid SIGNAL_UUID] [--signal-password SIGNAL_PASSWORD] [--signal-get-auth]
116
+ [--telegram-token TELEGRAM_TOKEN] [--telegram-userid TELEGRAM_USERID] [--telethon-setup]
117
+ [--kakao-auth-token KAKAO_AUTH_TOKEN] [--kakao-get-auth] [--kakao-get-auth-desktop]
118
+ [--kakao-bin-path KAKAO_BIN_PATH] [--kakao-username KAKAO_USERNAME]
119
+ [--kakao-password KAKAO_PASSWORD] [--kakao-country-code KAKAO_COUNTRY_CODE]
120
+ [--kakao-phone-number KAKAO_PHONE_NUMBER] [--line-get-auth] [--line-cookies LINE_COOKIES]
121
+ [--viber-auth VIBER_AUTH] [--viber-get-auth VIBER_GET_AUTH] [--viber-bin-path VIBER_BIN_PATH]
122
+ [--discord-get-auth] [--discord-token DISCORD_TOKEN] [--save-cred]
115
123
 
116
124
  CLI for stickers-convert
117
125
 
@@ -138,6 +146,10 @@ Input options:
138
146
  Download telegram stickers from a URL as input
139
147
  (Example: https://telegram.me/addstickers/xxxxx
140
148
  OR https://telegram.me/addemoji/xxxxx)
149
+ --download-telegram-telethon DOWNLOAD_TELEGRAM_TELETHON
150
+ Download telegram stickers from a URL as input with Telethon
151
+ (Example: https://telegram.me/addstickers/xxxxx
152
+ OR https://telegram.me/addemoji/xxxxx)
141
153
  --download-line DOWNLOAD_LINE
142
154
  Download line stickers from a URL / ID as input
143
155
  (Example: https://store.line.me/stickershop/product/1234/en
@@ -168,6 +180,10 @@ Output options:
168
180
  --export-telegram Upload to Telegram
169
181
  --export-telegram-emoji
170
182
  Upload to Telegram (Custom emoji)
183
+ --export-telegram-telethon
184
+ Upload to Telegram with Telethon *Not recommended, but allow link not end with _by_xxxbot*
185
+ --export-telegram-emoji-telethon
186
+ Upload to Telegram with Telethon (Custom emoji) *Not recommended, but allow link not end with _by_xxxbot*
171
187
  --export-viber Upload to Viber
172
188
  --export-whatsapp Create a .wastickers file for uploading to WhatsApp
173
189
  --export-imessage Create Xcode project for importing to iMessage
@@ -261,7 +277,8 @@ Credentials options:
261
277
  --telegram-token TELEGRAM_TOKEN
262
278
  Set Telegram token. Required for uploading and downloading Telegram stickers.
263
279
  --telegram-userid TELEGRAM_USERID
264
- Set telegram user_id (From real account, not bot account). Required for uploading Telegram stickers.
280
+ Set Telegram user_id (From real account, not bot account). Required for uploading Telegram stickers.
281
+ --telethon-setup Setup Telethon
265
282
  --kakao-auth-token KAKAO_AUTH_TOKEN
266
283
  Set Kakao auth_token. Required for downloading animated stickers from https://e.kakao.com/t/xxxxx
267
284
  --kakao-get-auth Generate Kakao auth_token by simulating login. Kakao username, password, country code and phone number are also required.
@@ -302,8 +319,7 @@ Credentials options:
302
319
  --discord-get-auth Get Discord token.
303
320
  --discord-token DISCORD_TOKEN
304
321
  Set Discord token. Required for downloading Discord stickers and emojis.
305
- --save-cred SAVE_CRED
306
- Save Signal and Telegram credentials.
322
+ --save-cred Save credentials.
307
323
  ```
308
324
 
309
325
  If you are running python script directly, run with `src/sticker-convert.py`
@@ -1,23 +1,25 @@
1
- aiolimiter~=1.2.0
2
- anyio~=4.6.2.post1
1
+ aiolimiter~=1.2.1
2
+ anyio~=4.7.0
3
3
  apngasm_python~=1.3.1
4
4
  av~=13.1.0
5
5
  beautifulsoup4~=4.12.3
6
+ cryptg~=0.5.0.post0
6
7
  rookiepy~=0.5.6
7
- httpx~=0.28.0
8
+ httpx~=0.28.1
8
9
  imagequant~=1.1.3
9
10
  memory-tempfile~=2.2.3
10
11
  mergedeep~=1.3.4
11
12
  mini-racer~=0.12.4
12
13
  numpy>=1.22.4
13
- Pillow~=11.0.0
14
+ Pillow~=10.4.0
14
15
  pyoxipng~=9.0.0
15
- python-telegram-bot~=21.8
16
- psutil~=6.1.0
16
+ python-telegram-bot~=21.9
17
+ psutil~=6.1.1
17
18
  PyMemoryEditor~=1.5.22
18
19
  requests~=2.32.3
19
20
  rlottie_python~=1.3.6
20
21
  signalstickers-client-fork-laggykiller~=3.3.0.post2
22
+ telethon~=1.38.1
21
23
  tqdm~=4.67.1
22
24
  ttkbootstrap-fork-laggykiller~=1.5.1
23
25
  websocket_client~=1.8.0
@@ -20,6 +20,7 @@ from sticker_convert.utils.auth.get_kakao_desktop_auth import GetKakaoDesktopAut
20
20
  from sticker_convert.utils.auth.get_line_auth import GetLineAuth
21
21
  from sticker_convert.utils.auth.get_signal_auth import GetSignalAuth
22
22
  from sticker_convert.utils.auth.get_viber_auth import GetViberAuth
23
+ from sticker_convert.utils.auth.telethon_setup import TelethonSetup
23
24
  from sticker_convert.utils.callback import Callback
24
25
  from sticker_convert.utils.files.json_manager import JsonManager
25
26
  from sticker_convert.utils.url_detect import UrlDetect
@@ -168,10 +169,12 @@ class CLI:
168
169
  parser_cred = parser.add_argument_group("Credentials options")
169
170
  flags_cred_bool = (
170
171
  "signal_get_auth",
172
+ "telethon_setup",
171
173
  "kakao_get_auth",
172
174
  "kakao_get_auth_desktop",
173
175
  "line_get_auth",
174
176
  "discord_get_auth",
177
+ "save_cred",
175
178
  )
176
179
  for k, v in self.help["cred"].items():
177
180
  keyword_args = {}
@@ -226,6 +229,7 @@ class CLI:
226
229
  "signal": args.download_signal,
227
230
  "line": args.download_line,
228
231
  "telegram": args.download_telegram,
232
+ "telegram_telethon": args.download_telegram_telethon,
229
233
  "kakao": args.download_kakao,
230
234
  "viber": args.download_viber,
231
235
  "discord": args.download_discord,
@@ -266,6 +270,14 @@ class CLI:
266
270
  export_option = "signal"
267
271
  elif args.export_telegram:
268
272
  export_option = "telegram"
273
+ elif args.export_telegram_emoji:
274
+ export_option = "telegram_emoji"
275
+ elif args.export_telegram_telethon:
276
+ export_option = "telegram_telethon"
277
+ elif args.export_telegram_emoji_telethon:
278
+ export_option = "telegram_emoji_telethon"
279
+ elif args.export_viber:
280
+ export_option = "viber"
269
281
  elif args.export_imessage:
270
282
  export_option = "imessage"
271
283
  else:
@@ -291,6 +303,10 @@ class CLI:
291
303
  args.export_whatsapp,
292
304
  args.export_signal,
293
305
  args.export_telegram,
306
+ args.export_telegram_emoji,
307
+ args.export_telegram_telethon,
308
+ args.export_telegram_emoji_telethon,
309
+ args.export_viber,
294
310
  args.export_imessage,
295
311
  )
296
312
  )
@@ -302,8 +318,12 @@ class CLI:
302
318
  preset = "whatsapp"
303
319
  elif args.export_signal:
304
320
  preset = "signal"
305
- elif args.export_telegram:
321
+ elif args.export_telegram or args.export_telegram_telethon:
306
322
  preset = "telegram"
323
+ elif args.export_telegram_emoji or args.export_telegram_emoji_telethon:
324
+ preset = "telegram_emoji"
325
+ elif args.export_viber:
326
+ preset = "viber"
307
327
  elif args.export_imessage:
308
328
  preset = "imessage_small"
309
329
  elif args.preset == "auto":
@@ -316,6 +336,12 @@ class CLI:
316
336
  self.cb.msg(
317
337
  "Auto compression option set to no_compress (Reason: Export to local directory only)"
318
338
  )
339
+ elif "telegram_emoji" in output_option:
340
+ preset = "telegram_emoji"
341
+ self.cb.msg(f"Auto compression option set to {preset}")
342
+ elif "telegram" in output_option:
343
+ preset = "telegram"
344
+ self.cb.msg(f"Auto compression option set to {preset}")
319
345
  elif output_option == "imessage":
320
346
  preset = "imessage_small"
321
347
  self.cb.msg(f"Auto compression option set to {preset}")
@@ -445,6 +471,8 @@ class CLI:
445
471
  telegram_userid=args.telegram_userid
446
472
  if args.telegram_userid
447
473
  else creds.get("telegram", {}).get("userid"),
474
+ telethon_api_id=creds.get("telethon", {}).get("api_id"),
475
+ telethon_api_hash=creds.get("telethon", {}).get("api_hash"),
448
476
  kakao_auth_token=args.kakao_auth_token
449
477
  if args.kakao_auth_token
450
478
  else creds.get("kakao", {}).get("auth_token"),
@@ -511,6 +539,16 @@ class CLI:
511
539
 
512
540
  self.cb.msg("Failed to get uuid and password")
513
541
 
542
+ if args.telethon_setup:
543
+ telethon_setup = TelethonSetup(opt_cred, self.cb.ask_str)
544
+ success, _, telethon_api_id, telethon_api_hash = telethon_setup.start()
545
+
546
+ if success:
547
+ opt_cred.telethon_api_id = telethon_api_id
548
+ opt_cred.telethon_api_hash = telethon_api_hash
549
+
550
+ self.cb.msg("Telethon setup successful")
551
+
514
552
  if args.line_get_auth:
515
553
  get_line_auth = GetLineAuth()
516
554
 
@@ -434,7 +434,7 @@ class StickerConvert:
434
434
  # Pillow is not reliable for getting webp frame durations
435
435
  durations: Optional[List[int]]
436
436
  if im.format == "WEBP":
437
- _, _, _, durations = CodecInfo._get_file_fps_frames_duration_webp(
437
+ _, _, _, durations = CodecInfo._get_file_fps_frames_duration_webp( # type: ignore
438
438
  self.in_f
439
439
  )
440
440
  else:
@@ -702,9 +702,9 @@ class StickerConvert:
702
702
  self._frames_export_apng()
703
703
  else:
704
704
  self._frames_export_png()
705
- elif self.out_f.suffix == ".gif":
705
+ elif self.out_f.suffix in (".gif", ".webp"):
706
706
  self._frames_export_pil_anim()
707
- elif self.out_f.suffix in (".webm", ".mp4", ".mkv", ".webp") or is_animated:
707
+ elif self.out_f.suffix in (".webm", ".mp4", ".mkv") or is_animated:
708
708
  self._frames_export_pyav()
709
709
  else:
710
710
  self._frames_export_pil()
@@ -764,7 +764,7 @@ class StickerConvert:
764
764
  format=self.out_f.suffix.replace(".", ""),
765
765
  options=options_container,
766
766
  ) as output:
767
- out_stream = output.add_stream(codec, rate=self.fps, options=options_stream)
767
+ out_stream = output.add_stream(codec, rate=self.fps, options=options_stream) # type: ignore
768
768
  out_stream = cast(VideoStream, out_stream)
769
769
  assert isinstance(self.res_w, int) and isinstance(self.res_h, int)
770
770
  out_stream.width = self.res_w
@@ -811,8 +811,12 @@ class StickerConvert:
811
811
  elif self.out_f.suffix == ".webp":
812
812
  im_out = [Image.fromarray(i) for i in self.frames_processed] # type: ignore
813
813
  extra_kwargs["format"] = "WebP"
814
- extra_kwargs["minimize_size"] = True
815
- extra_kwargs["method"] = 6
814
+ extra_kwargs["allow_mixed"] = True
815
+ if self.quality:
816
+ if self.quality < 20:
817
+ extra_kwargs["minimize_size"] = True
818
+ extra_kwargs["method"] = 4 + int(2 * (100 - self.quality) / 100)
819
+ extra_kwargs["alpha_quality"] = self.quality
816
820
  else:
817
821
  raise RuntimeError(f"Invalid format {self.out_f.suffix}")
818
822
 
@@ -3,7 +3,7 @@ from __future__ import annotations
3
3
 
4
4
  from functools import partial
5
5
  from pathlib import Path
6
- from typing import Any, List, Optional, Tuple
6
+ from typing import Any, Dict, List, Optional, Tuple
7
7
 
8
8
  import anyio
9
9
  import httpx
@@ -34,18 +34,26 @@ class DownloadBase:
34
34
  retries: int = 3,
35
35
  headers: Optional[dict[Any, Any]] = None,
36
36
  **kwargs: Any,
37
- ) -> None:
37
+ ) -> Dict[str, bool]:
38
+ results: Dict[str, bool] = {}
38
39
  anyio.run(
39
40
  partial(
40
- self.download_multiple_files_async, targets, retries, headers, **kwargs
41
+ self.download_multiple_files_async,
42
+ targets,
43
+ retries,
44
+ headers,
45
+ results,
46
+ **kwargs,
41
47
  )
42
48
  )
49
+ return results
43
50
 
44
51
  async def download_multiple_files_async(
45
52
  self,
46
53
  targets: List[Tuple[str, Path]],
47
54
  retries: int = 3,
48
55
  headers: Optional[dict[Any, Any]] = None,
56
+ results: Optional[dict[str, bool]] = None,
49
57
  **kwargs: Any,
50
58
  ) -> None:
51
59
  # targets format: [(url1, dest2), (url2, dest2), ...]
@@ -53,44 +61,56 @@ class DownloadBase:
53
61
  ("bar", None, {"set_progress_mode": "determinate", "steps": len(targets)})
54
62
  )
55
63
 
64
+ semaphore = anyio.Semaphore(4)
65
+
56
66
  async with httpx.AsyncClient() as client:
57
67
  async with anyio.create_task_group() as tg:
58
68
  for url, dest in targets:
59
69
  tg.start_soon(
60
70
  self.download_file_async,
71
+ semaphore,
61
72
  client,
62
73
  url,
63
74
  dest,
64
75
  retries,
65
76
  headers,
77
+ results,
66
78
  **kwargs,
67
79
  )
68
80
 
69
81
  async def download_file_async(
70
82
  self,
83
+ semaphore: anyio.Semaphore,
71
84
  client: httpx.AsyncClient,
72
85
  url: str,
73
86
  dest: Path,
74
87
  retries: int = 3,
75
88
  headers: Optional[dict[Any, Any]] = None,
89
+ results: Optional[dict[str, bool]] = None,
76
90
  **kwargs: Any,
77
91
  ) -> None:
78
- self.cb.put(f"Downloading {url}")
79
- for retry in range(retries):
80
- response = await client.get(
81
- url, follow_redirects=True, headers=headers, **kwargs
82
- )
83
-
84
- if response.is_success:
85
- async with await anyio.open_file(dest, "wb+") as f:
86
- await f.write(response.content)
87
- self.cb.put(f"Downloaded {url}")
88
- else:
89
- self.cb.put(
90
- f"Error {response.status_code}: {url} (tried {retry+1}/{retries} times)"
92
+ async with semaphore:
93
+ self.cb.put(f"Downloading {url}")
94
+ success = False
95
+ for retry in range(retries):
96
+ response = await client.get(
97
+ url, follow_redirects=True, headers=headers, **kwargs
91
98
  )
99
+ success = response.is_success
100
+
101
+ if success:
102
+ async with await anyio.open_file(dest, "wb+") as f:
103
+ await f.write(response.content)
104
+ self.cb.put(f"Downloaded {url}")
105
+ else:
106
+ self.cb.put(
107
+ f"Error {response.status_code}: {url} (tried {retry+1}/{retries} times)"
108
+ )
109
+
110
+ if results is not None:
111
+ results[url] = success
92
112
 
93
- self.cb.put("update_bar")
113
+ self.cb.put("update_bar")
94
114
 
95
115
  def download_file(
96
116
  self,
@@ -21,10 +21,10 @@ class DownloadDiscord(DownloadBase):
21
21
  # def __init__(self, *args: Any, **kwargs: Any) -> None:
22
22
  # super().__init__(*args, **kwargs)
23
23
 
24
- def download_stickers_discord(self) -> bool:
24
+ def download_stickers_discord(self) -> Tuple[int, int]:
25
25
  if self.opt_cred is None or self.opt_cred.discord_token == "":
26
26
  self.cb.put("Error: Downloading from Discord requires token")
27
- return False
27
+ return 0, 0
28
28
 
29
29
  gid: Optional[str] = None
30
30
  if self.url.isnumeric():
@@ -36,7 +36,7 @@ class DownloadDiscord(DownloadBase):
36
36
 
37
37
  if gid is None or gid.isnumeric() is False:
38
38
  self.cb.put("Error: Invalid url")
39
- return False
39
+ return 0, 0
40
40
 
41
41
  headers = {
42
42
  "Authorization": self.opt_cred.discord_token,
@@ -68,7 +68,7 @@ class DownloadDiscord(DownloadBase):
68
68
  f_path = Path(self.out_dir, f_name)
69
69
  targets.append((sticker_url, f_path))
70
70
 
71
- self.download_multiple_files(targets)
71
+ results = self.download_multiple_files(targets)
72
72
 
73
73
  server_name = r_json["name"]
74
74
  MetadataHandler.set_metadata(
@@ -78,7 +78,7 @@ class DownloadDiscord(DownloadBase):
78
78
  emoji_dict=emoji_dict if self.input_option == "discord" else None,
79
79
  )
80
80
 
81
- return True
81
+ return sum(results.values()), len(targets)
82
82
 
83
83
  @staticmethod
84
84
  def start(
@@ -86,6 +86,6 @@ class DownloadDiscord(DownloadBase):
86
86
  opt_cred: Optional[CredOption],
87
87
  cb: CallbackProtocol,
88
88
  cb_return: CallbackReturn,
89
- ) -> bool:
89
+ ) -> Tuple[int, int]:
90
90
  downloader = DownloadDiscord(opt_input, opt_cred, cb, cb_return)
91
91
  return downloader.download_stickers_discord()