sticker-convert 2.9.4__tar.gz → 2.10.0__tar.gz

Sign up to get free protection for your applications and to get access to all the features.
Files changed (124) hide show
  1. {sticker_convert-2.9.4/src/sticker_convert.egg-info → sticker_convert-2.10.0}/PKG-INFO +40 -42
  2. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/README.md +34 -37
  3. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/pyproject.toml +2 -2
  4. sticker_convert-2.9.4/src/sticker_convert.egg-info/requires.txt → sticker_convert-2.10.0/requirements.txt +3 -2
  5. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/cli.py +26 -13
  6. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/downloaders/download_base.py +20 -23
  7. sticker_convert-2.10.0/src/sticker_convert/downloaders/download_discord.py +91 -0
  8. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/downloaders/download_kakao.py +3 -4
  9. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/downloaders/download_line.py +3 -4
  10. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/downloaders/download_signal.py +3 -4
  11. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/downloaders/download_telegram.py +3 -4
  12. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/downloaders/download_viber.py +3 -4
  13. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/gui.py +15 -3
  14. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/gui_components/frames/cred_frame.py +22 -1
  15. sticker_convert-2.10.0/src/sticker_convert/gui_components/windows/discord_get_auth_window.py +82 -0
  16. sticker_convert-2.10.0/src/sticker_convert/gui_components/windows/signal_get_auth_window.py +89 -0
  17. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/job.py +11 -1
  18. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/job_option.py +2 -0
  19. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/resources/compression.json +94 -0
  20. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/resources/help.json +2 -1
  21. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/resources/input.json +20 -0
  22. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/uploaders/upload_signal.py +5 -4
  23. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/uploaders/upload_telegram.py +11 -10
  24. sticker_convert-2.10.0/src/sticker_convert/utils/auth/get_discord_auth.py +115 -0
  25. sticker_convert-2.10.0/src/sticker_convert/utils/auth/get_signal_auth.py +130 -0
  26. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/utils/auth/get_viber_auth.py +10 -214
  27. sticker_convert-2.10.0/src/sticker_convert/utils/chrome_remotedebug.py +152 -0
  28. sticker_convert-2.10.0/src/sticker_convert/utils/emoji.py +16 -0
  29. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/utils/files/run_bin.py +1 -1
  30. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/utils/media/codec_info.py +45 -60
  31. sticker_convert-2.10.0/src/sticker_convert/utils/process.py +187 -0
  32. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/utils/url_detect.py +3 -0
  33. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/version.py +1 -1
  34. {sticker_convert-2.9.4 → sticker_convert-2.10.0/src/sticker_convert.egg-info}/PKG-INFO +40 -42
  35. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert.egg-info/SOURCES.txt +6 -0
  36. sticker_convert-2.9.4/requirements.txt → sticker_convert-2.10.0/src/sticker_convert.egg-info/requires.txt +4 -3
  37. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/tests/test_download.py +28 -0
  38. sticker_convert-2.9.4/src/sticker_convert/gui_components/windows/signal_get_auth_window.py +0 -135
  39. sticker_convert-2.9.4/src/sticker_convert/utils/auth/get_signal_auth.py +0 -129
  40. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/LICENSE +0 -0
  41. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/MANIFEST.in +0 -0
  42. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/setup.cfg +0 -0
  43. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/__init__.py +0 -0
  44. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/__main__.py +0 -0
  45. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/converter.py +0 -0
  46. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/definitions.py +0 -0
  47. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/downloaders/__init__.py +0 -0
  48. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/gui_components/__init__.py +0 -0
  49. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/gui_components/frames/__init__.py +0 -0
  50. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/gui_components/frames/comp_frame.py +0 -0
  51. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/gui_components/frames/config_frame.py +0 -0
  52. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/gui_components/frames/control_frame.py +0 -0
  53. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/gui_components/frames/input_frame.py +0 -0
  54. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/gui_components/frames/output_frame.py +0 -0
  55. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/gui_components/frames/progress_frame.py +0 -0
  56. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/gui_components/frames/right_clicker.py +0 -0
  57. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/gui_components/gui_utils.py +0 -0
  58. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/gui_components/windows/__init__.py +0 -0
  59. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/gui_components/windows/advanced_compression_window.py +0 -0
  60. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/gui_components/windows/base_window.py +0 -0
  61. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/gui_components/windows/kakao_get_auth_window.py +0 -0
  62. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/gui_components/windows/line_get_auth_window.py +0 -0
  63. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/gui_components/windows/viber_get_auth_window.py +0 -0
  64. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/ios-message-stickers-template/.github/FUNDING.yml +0 -0
  65. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/ios-message-stickers-template/.gitignore +0 -0
  66. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/ios-message-stickers-template/README.md +0 -0
  67. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/ios-message-stickers-template/stickers/Info.plist +0 -0
  68. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Info.plist +0 -0
  69. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/Contents.json +0 -0
  70. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/Sticker Pack.stickerpack/Contents.json +0 -0
  71. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/Sticker Pack.stickerpack/Sticker 1.sticker/Contents.json +0 -0
  72. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/Sticker Pack.stickerpack/Sticker 1.sticker/Sticker 1.png +0 -0
  73. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/Sticker Pack.stickerpack/Sticker 2.sticker/Contents.json +0 -0
  74. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/Sticker Pack.stickerpack/Sticker 2.sticker/Sticker 2.png +0 -0
  75. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/Sticker Pack.stickerpack/Sticker 3.sticker/Contents.json +0 -0
  76. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/Sticker Pack.stickerpack/Sticker 3.sticker/Sticker 3.png +0 -0
  77. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/App-Store-1024x1024pt.png +0 -0
  78. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Contents.json +0 -0
  79. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Messages-App-Store-1024x768pt.png +0 -0
  80. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Messages-iPad-67x50pt@2x.png +0 -0
  81. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Messages-iPad-Pro-74x55pt@2x.png +0 -0
  82. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Messages-iPhone-60x45pt@2x.png +0 -0
  83. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Messages-iPhone-60x45pt@3x.png +0 -0
  84. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Messages27x20pt@2x.png +0 -0
  85. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Messages27x20pt@3x.png +0 -0
  86. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Messages32x24pt@2x.png +0 -0
  87. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Messages32x24pt@3x.png +0 -0
  88. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/iPad-Settings-29pt@2x.png +0 -0
  89. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/iPhone-Settings-29pt@3x.png +0 -0
  90. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/iPhone-settings-29pt@2x.png +0 -0
  91. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/ios-message-stickers-template/stickers.xcodeproj/project.pbxproj +0 -0
  92. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/ios-message-stickers-template/stickers.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -0
  93. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/ios-message-stickers-template/stickers.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -0
  94. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/ios-message-stickers-template/stickers.xcodeproj/project.xcworkspace/xcuserdata/niklaspeterson.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  95. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/ios-message-stickers-template/stickers.xcodeproj/xcuserdata/niklaspeterson.xcuserdatad/xcschemes/xcschememanagement.plist +0 -0
  96. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/resources/NotoColorEmoji.ttf +0 -0
  97. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/resources/appicon.icns +0 -0
  98. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/resources/appicon.ico +0 -0
  99. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/resources/appicon.png +0 -0
  100. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/resources/emoji.json +0 -0
  101. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/resources/memdump_linux.sh +0 -0
  102. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/resources/memdump_windows.ps1 +0 -0
  103. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/resources/output.json +0 -0
  104. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/uploaders/__init__.py +0 -0
  105. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/uploaders/compress_wastickers.py +0 -0
  106. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/uploaders/upload_base.py +0 -0
  107. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/uploaders/upload_viber.py +0 -0
  108. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/uploaders/xcode_imessage.py +0 -0
  109. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/utils/auth/get_kakao_auth.py +0 -0
  110. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/utils/auth/get_line_auth.py +0 -0
  111. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/utils/callback.py +0 -0
  112. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/utils/files/cache_store.py +0 -0
  113. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/utils/files/json_manager.py +0 -0
  114. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/utils/files/json_resources_loader.py +0 -0
  115. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/utils/files/metadata_handler.py +0 -0
  116. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/utils/files/sanitize_filename.py +0 -0
  117. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/utils/media/apple_png_normalize.py +0 -0
  118. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/utils/media/decrypt_kakao.py +0 -0
  119. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert/utils/media/format_verify.py +0 -0
  120. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert.egg-info/dependency_links.txt +0 -0
  121. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert.egg-info/entry_points.txt +0 -0
  122. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/src/sticker_convert.egg-info/top_level.txt +0 -0
  123. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/tests/test_compression.py +0 -0
  124. {sticker_convert-2.9.4 → sticker_convert-2.10.0}/tests/test_export.py +0 -0
@@ -1,7 +1,7 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: sticker-convert
3
- Version: 2.9.4
4
- Summary: Convert (animated) stickers to/from WhatsApp, Telegram, Signal, Line, Kakao, Viber, iMessage. Written in Python.
3
+ Version: 2.10.0
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>
7
7
  License: GNU GENERAL PUBLIC LICENSE
@@ -349,7 +349,7 @@ Project-URL: Source, https://github.com/laggykiller/sticker-convert
349
349
  Project-URL: Documentation, https://github.com/laggykiller/sticker-convert
350
350
  Project-URL: Tracker, https://github.com/laggykiller/sticker-convert/issues
351
351
  Project-URL: Repository, https://github.com/laggykiller/sticker-convert
352
- Keywords: telegram,line,tgs,whatsapp,kakao,signal,imessage,wastickers,viber
352
+ Keywords: telegram,line,tgs,whatsapp,kakao,signal,imessage,wastickers,viber,discord
353
353
  Classifier: Development Status :: 5 - Production/Stable
354
354
  Classifier: Intended Audience :: End Users/Desktop
355
355
  Classifier: Topic :: Multimedia :: Graphics :: Graphics Conversion
@@ -370,6 +370,7 @@ Requires-Dist: apngasm_python~=1.3.1
370
370
  Requires-Dist: av~=12.3.0
371
371
  Requires-Dist: beautifulsoup4~=4.12.3
372
372
  Requires-Dist: rookiepy~=0.5.2
373
+ Requires-Dist: httpx~=0.27.0
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
@@ -383,17 +384,17 @@ 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
386
- Requires-Dist: sqlcipher3-wheels~=0.5.2.post1
387
- Requires-Dist: tqdm~=4.66.4
387
+ Requires-Dist: tqdm~=4.66.5
388
388
  Requires-Dist: ttkbootstrap-fork-laggykiller~=1.5.1
389
+ Requires-Dist: websocket_client~=1.8.0
389
390
 
390
391
  # sticker-convert
391
- ![imgs/banner.png](imgs/banner.png)
392
+ ![imgs/banner.png](https://socialify.git.ci/laggykiller/sticker-convert/image?description=1&font=Inter&logo=https%3A%2F%2Fgithub.com%2Flaggykiller%2Fsticker-convert%2Fblob%2Fmaster%2Fsrc%2Fsticker_convert%2Fresources%2Fappicon.png%3Fraw%3Dtrue&name=1&owner=1&theme=Dark)
392
393
  ![imgs/screenshot](imgs/screenshot.png)
393
394
 
394
395
  - A python script for creating, downloading, converting+compressing and uploading stickers from multiple instant messaging applications.
395
396
  - With GUI and CLI that runs on Windows, MacOS and Linux
396
- - Currently supports Signal, Telegram, WhatsApp (Create .wastickers), Line (Download only), Kakao (Download only), Viber, iMessage (Create Xcode sticker pack project)
397
+ - Currently supports Signal, Telegram, WhatsApp (Create .wastickers), Line (Download only), Kakao (Download only), Viber, Discord (Download only), iMessage (Create Xcode sticker pack project)
397
398
  - Supports static and animated stickers, with transparency support
398
399
 
399
400
  ## Downloads
@@ -432,6 +433,7 @@ Requires-Dist: ttkbootstrap-fork-laggykiller~=1.5.1
432
433
  | [Line](docs/guide_line.md) | ✅ | 🚫 (Need to submit for manual approval) |
433
434
  | [Kakao](docs/guide_kakao.md) | ✅ (Need 'share link' for animated) | 🚫 (Need to submit for manual approval) |
434
435
  | [Viber](docs/guide_viber.md) | ✅ | ✅ (Require `viber_auth`) |
436
+ | [Discord](docs/guide_discord.md) | ✅ (Required `token`) | 🚫 |
435
437
  | [iMessage](docs/guide_imessage.md) | 🚫 | ⭕ (Create Xcode stickerpack project for sideload) |
436
438
 
437
439
  ✅ = Supported ⭕ = Partially supported 🚫 = Not supported
@@ -441,14 +443,14 @@ Requires-Dist: ttkbootstrap-fork-laggykiller~=1.5.1
441
443
  - Upload: Supported
442
444
  - `uuid` and `password` are needed if you want to automatically upload the pack with the program. View FAQ for more information.
443
445
  - Alternatively, you may use Signal Desktop to manually upload and create sticker pack with the output of this prorgam.
444
- - Telegram (e.g. `https://telegram.me/addstickers/xxxxx`)
445
- - Download: Supported for both stickers and custom emoji, but require bot token
446
+ - Telegram
447
+ - Download: Supported (e.g. `https://telegram.me/addstickers/xxxxx`) for both stickers and custom emoji, but require bot token.
446
448
  - 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.
447
449
  - WhatsApp
448
- - Download: You have to manually find sticker packs / extract from your phone or from WhatsApp Web
450
+ - Download: You have to manually find sticker packs / extract from your phone or from WhatsApp Web.
449
451
  - Android Phone: Inside `/storage/emulated/0/Whatsapp/media/Whatsapp Stickers` OR `/storage/emulated/0/Android/media/com.whatsapp/WhatsApp/Media/WhatsApp Stickers`
450
452
  - Any: Go to WhatsApp Web, right click on sticker and click "Save image as..."
451
- - Upload: The program can create .wastickers file, which could then be imported into WhatsApp via a third-party app named 'Sticker Maker' (The author of this repo is NOT affiliated with Sticker Maker). View FAQ for more information
453
+ - Upload: The program can create .wastickers file, which could then be imported into WhatsApp via a third-party app named 'Sticker Maker' (The author of this repo is NOT affiliated with Sticker Maker). View FAQ for more information.
452
454
  - Line
453
455
  - Download: Supported (e.g. `https://store.line.me/stickershop/product/1234/en` OR `line://shop/detail/1234` OR `1234`)
454
456
  - Search on official site: https://store.line.me/stickershop
@@ -461,6 +463,9 @@ Requires-Dist: ttkbootstrap-fork-laggykiller~=1.5.1
461
463
  - Viber
462
464
  - Download: Supported (e.g. `https://stickers.viber.com/pages/example` OR `https://stickers.viber.com/pages/custom-sticker-packs/example`)
463
465
  - Upload: Supported. Viber authentication data required for uploading Viber stickers, which could be fetched from Viber Desktop application automatically.
466
+ - Discord
467
+ - Download: Supported (e.g. `https://discord.com/channels/169256939211980800/@home` OR `169256939211980800`), but require user token.
468
+ - Upload: Not supported.
464
469
  - iMessage
465
470
  - Download: Not supported.
466
471
  - Upload: The program can create Xcode project for iMessage sticker pack, which could then be compiled and sideloaded using Xcode.
@@ -481,31 +486,15 @@ Requires-Dist: ttkbootstrap-fork-laggykiller~=1.5.1
481
486
  To run in CLI mode, pass on any arguments
482
487
 
483
488
  ```
484
- usage: sticker-convert.py [-h] [--version] [--no-confirm] [--no-progress] [--custom-presets CUSTOM_PRESETS]
485
- [--input-dir INPUT_DIR]
486
- [--download-auto DOWNLOAD_AUTO | --download-signal DOWNLOAD_SIGNAL | --download-telegram DOWNLOAD_TELEGRAM | --download-line DOWNLOAD_LINE | --download-kakao DOWNLOAD_KAKAO | --download-viber DOWNLOAD_VIBER]
487
- [--output-dir OUTPUT_DIR] [--author AUTHOR] [--title TITLE]
488
- [--export-signal | --export-telegram | --export-telegram-emoji | --export-whatsapp | --export-viber | --export-imessage]
489
- [--no-compress]
490
- [--preset {auto,signal,telegram,telegram_emoji,whatsapp,line,kakao,viber,imessage_small,imessage_medium,imessage_large,custom}]
491
- [--steps STEPS] [--processes PROCESSES] [--fps-min FPS_MIN] [--fps-max FPS_MAX]
492
- [--fps-power FPS_POWER] [--res-min RES_MIN] [--res-max RES_MAX] [--res-w-min RES_W_MIN]
493
- [--res-w-max RES_W_MAX] [--res-h-min RES_H_MIN] [--res-h-max RES_H_MAX]
494
- [--res-power RES_POWER] [--quality-min QUALITY_MIN] [--quality-max QUALITY_MAX]
495
- [--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]
497
- [--padding-percent PADDING_PERCENT] [--bg-color BG_COLOR] [--vid-size-max VID_SIZE_MAX]
498
- [--img-size-max IMG_SIZE_MAX] [--vid-format VID_FORMAT] [--img-format IMG_FORMAT]
499
- [--fake-vid] [--scale-filter SCALE_FILTER] [--quantize-method QUANTIZE_METHOD]
500
- [--cache-dir CACHE_DIR] [--default-emoji DEFAULT_EMOJI] [--signal-uuid SIGNAL_UUID]
501
- [--signal-password SIGNAL_PASSWORD] [--signal-get-auth]
502
- [--signal-data-dir SIGNAL_DATA_DIR] [--telegram-token TELEGRAM_TOKEN]
503
- [--telegram-userid TELEGRAM_USERID] [--kakao-auth-token KAKAO_AUTH_TOKEN]
504
- [--kakao-get-auth] [--kakao-username KAKAO_USERNAME] [--kakao-password KAKAO_PASSWORD]
505
- [--kakao-country-code KAKAO_COUNTRY_CODE] [--kakao-phone-number KAKAO_PHONE_NUMBER]
506
- [--line-get-auth] [--line-cookies LINE_COOKIES] [--viber-auth VIBER_AUTH]
507
- [--viber-get-auth VIBER_GET_AUTH] [--viber-bin-path VIBER_BIN_PATH]
508
- [--save-cred SAVE_CRED]
489
+ usage: sticker-convert.py [-h] [--version] [--no-confirm] [--no-progress] [--custom-presets CUSTOM_PRESETS] [--input-dir INPUT_DIR]
490
+ [--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]
491
+ [--output-dir OUTPUT_DIR] [--author AUTHOR] [--title TITLE] [--export-signal | --export-telegram | --export-telegram-emoji | --export-viber | --export-whatsapp | --export-imessage] [--no-compress]
492
+ [--preset {auto,signal,telegram,telegram_emoji,whatsapp,line,kakao,viber,discord,discord_emoji,imessage_small,imessage_medium,imessage_large,custom}] [--steps STEPS] [--processes PROCESSES] [--fps-min FPS_MIN] [--fps-max FPS_MAX] [--fps-power FPS_POWER]
493
+ [--res-min RES_MIN] [--res-max RES_MAX] [--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] [--quality-min QUALITY_MIN] [--quality-max QUALITY_MAX] [--quality-power QUALITY_POWER]
494
+ [--color-min COLOR_MIN] [--color-max COLOR_MAX] [--color-power COLOR_POWER] [--duration-min DURATION_MIN] [--duration-max DURATION_MAX] [--padding-percent PADDING_PERCENT] [--bg-color BG_COLOR] [--vid-size-max VID_SIZE_MAX] [--img-size-max IMG_SIZE_MAX]
495
+ [--vid-format VID_FORMAT] [--img-format IMG_FORMAT] [--fake-vid] [--scale-filter SCALE_FILTER] [--quantize-method QUANTIZE_METHOD] [--cache-dir CACHE_DIR] [--default-emoji DEFAULT_EMOJI] [--signal-uuid SIGNAL_UUID] [--signal-password SIGNAL_PASSWORD] [--signal-get-auth]
496
+ [--telegram-token TELEGRAM_TOKEN] [--telegram-userid TELEGRAM_USERID] [--kakao-auth-token KAKAO_AUTH_TOKEN] [--kakao-get-auth] [--kakao-username KAKAO_USERNAME] [--kakao-password KAKAO_PASSWORD] [--kakao-country-code KAKAO_COUNTRY_CODE]
497
+ [--kakao-phone-number KAKAO_PHONE_NUMBER] [--line-get-auth] [--line-cookies LINE_COOKIES] [--viber-auth VIBER_AUTH] [--viber-get-auth VIBER_GET_AUTH] [--viber-bin-path VIBER_BIN_PATH] [--discord-get-auth] [--discord-token DISCORD_TOKEN] [--save-cred SAVE_CRED]
509
498
 
510
499
  CLI for stickers-convert
511
500
 
@@ -544,6 +533,14 @@ Input options:
544
533
  Download viber stickers from a URL as input
545
534
  (Example: https://stickers.viber.com/pages/example
546
535
  OR https://stickers.viber.com/pages/custom-sticker-packs/example)
536
+ --download-discord DOWNLOAD_DISCORD
537
+ Download discord stickers from a channel URL / ID as input
538
+ (Example: https://discord.com/channels/169256939211980800/@home
539
+ OR 169256939211980800)
540
+ --download-discord-emoji DOWNLOAD_DISCORD_EMOJI
541
+ Download discord emojis from a channel URL / ID as input
542
+ (Example: https://discord.com/channels/169256939211980800/@home
543
+ OR 169256939211980800)
547
544
 
548
545
  Output options:
549
546
  --output-dir OUTPUT_DIR
@@ -554,13 +551,13 @@ Output options:
554
551
  --export-telegram Upload to Telegram
555
552
  --export-telegram-emoji
556
553
  Upload to Telegram (Custom emoji)
557
- --export-whatsapp Create a .wastickers file for uploading to WhatsApp
558
554
  --export-viber Upload to Viber
555
+ --export-whatsapp Create a .wastickers file for uploading to WhatsApp
559
556
  --export-imessage Create Xcode project for importing to iMessage
560
557
 
561
558
  Compression options:
562
559
  --no-compress Do not compress files. Useful for only downloading stickers.
563
- --preset {auto,signal,telegram,telegram_emoji,whatsapp,line,kakao,viber,imessage_small,imessage_medium,imessage_large,custom}
560
+ --preset {auto,signal,telegram,telegram_emoji,whatsapp,line,kakao,viber,discord,discord_emoji,imessage_small,imessage_medium,imessage_large,custom}
564
561
  Apply preset for compression.
565
562
  --steps STEPS Set number of divisions between min and max settings.
566
563
  Steps higher = Slower but yields file more closer to the specified file size limit.
@@ -644,9 +641,6 @@ Credentials options:
644
641
  --signal-password SIGNAL_PASSWORD
645
642
  Set Signal password. Required for uploading Signal stickers.
646
643
  --signal-get-auth Generate Signal uuid and password.
647
- --signal-data-dir SIGNAL_DATA_DIR
648
- Optionally specify Signal data directory
649
- for getting uuid and password. Useful for portable Signal.
650
644
  --telegram-token TELEGRAM_TOKEN
651
645
  Set Telegram token. Required for uploading and downloading Telegram stickers.
652
646
  --telegram-userid TELEGRAM_USERID
@@ -682,6 +676,9 @@ Credentials options:
682
676
  --viber-bin-path VIBER_BIN_PATH
683
677
  Specify location of Viber Desktop application.
684
678
  Useful for portable installation.
679
+ --discord-get-auth Get Discord token.
680
+ --discord-token DISCORD_TOKEN
681
+ Set Discord token. Required for downloading Discord stickers and emojis.
685
682
  --save-cred SAVE_CRED
686
683
  Save Signal and Telegram credentials.
687
684
  ```
@@ -794,6 +791,7 @@ See [docs/COMPILING.md](docs/COMPILING.md)
794
791
  - [Line](docs/guide_line.md)
795
792
  - [Kakao](docs/guide_kakao.md)
796
793
  - [Viber](docs/guide_viber.md)
794
+ - [Discord](docs/guide_discord.md)
797
795
  - [iMessage](docs/guide_imessage.md)
798
796
 
799
797
  ### Conversion is slow
@@ -854,5 +852,5 @@ See [docs/TODO.md](docs/TODO.md)
854
852
  - Banner generated from [GitHub Socialify](https://socialify.git.ci/)
855
853
 
856
854
  ## DISCLAIMER
857
- - The author of this repo is NOT affiliated with Signal, Telegram, WhatsApp, Line, Kakao, Viber, iMessage or Sticker Maker.
855
+ - The author of this repo is NOT affiliated with Signal, Telegram, WhatsApp, Line, Kakao, Viber, Discord, iMessage or Sticker Maker.
858
856
  - The author of this repo is NOT repsonsible for any legal consequences and loss incurred from using this repo.
@@ -1,10 +1,10 @@
1
1
  # sticker-convert
2
- ![imgs/banner.png](imgs/banner.png)
2
+ ![imgs/banner.png](https://socialify.git.ci/laggykiller/sticker-convert/image?description=1&font=Inter&logo=https%3A%2F%2Fgithub.com%2Flaggykiller%2Fsticker-convert%2Fblob%2Fmaster%2Fsrc%2Fsticker_convert%2Fresources%2Fappicon.png%3Fraw%3Dtrue&name=1&owner=1&theme=Dark)
3
3
  ![imgs/screenshot](imgs/screenshot.png)
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, iMessage (Create Xcode sticker pack project)
7
+ - Currently supports Signal, Telegram, WhatsApp (Create .wastickers), Line (Download only), Kakao (Download only), Viber, Discord (Download only), iMessage (Create Xcode sticker pack project)
8
8
  - Supports static and animated stickers, with transparency support
9
9
 
10
10
  ## Downloads
@@ -43,6 +43,7 @@
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
45
  | [Viber](docs/guide_viber.md) | ✅ | ✅ (Require `viber_auth`) |
46
+ | [Discord](docs/guide_discord.md) | ✅ (Required `token`) | 🚫 |
46
47
  | [iMessage](docs/guide_imessage.md) | 🚫 | ⭕ (Create Xcode stickerpack project for sideload) |
47
48
 
48
49
  ✅ = Supported ⭕ = Partially supported 🚫 = Not supported
@@ -52,14 +53,14 @@
52
53
  - Upload: Supported
53
54
  - `uuid` and `password` are needed if you want to automatically upload the pack with the program. View FAQ for more information.
54
55
  - Alternatively, you may use Signal Desktop to manually upload and create sticker pack with the output of this prorgam.
55
- - Telegram (e.g. `https://telegram.me/addstickers/xxxxx`)
56
- - Download: Supported for both stickers and custom emoji, but require bot token
56
+ - Telegram
57
+ - Download: Supported (e.g. `https://telegram.me/addstickers/xxxxx`) for both stickers and custom emoji, but require bot token.
57
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.
58
59
  - WhatsApp
59
- - Download: You have to manually find sticker packs / extract from your phone or from WhatsApp Web
60
+ - Download: You have to manually find sticker packs / extract from your phone or from WhatsApp Web.
60
61
  - Android Phone: Inside `/storage/emulated/0/Whatsapp/media/Whatsapp Stickers` OR `/storage/emulated/0/Android/media/com.whatsapp/WhatsApp/Media/WhatsApp Stickers`
61
62
  - Any: Go to WhatsApp Web, right click on sticker and click "Save image as..."
62
- - Upload: The program can create .wastickers file, which could then be imported into WhatsApp via a third-party app named 'Sticker Maker' (The author of this repo is NOT affiliated with Sticker Maker). View FAQ for more information
63
+ - Upload: The program can create .wastickers file, which could then be imported into WhatsApp via a third-party app named 'Sticker Maker' (The author of this repo is NOT affiliated with Sticker Maker). View FAQ for more information.
63
64
  - Line
64
65
  - Download: Supported (e.g. `https://store.line.me/stickershop/product/1234/en` OR `line://shop/detail/1234` OR `1234`)
65
66
  - Search on official site: https://store.line.me/stickershop
@@ -72,6 +73,9 @@
72
73
  - Viber
73
74
  - Download: Supported (e.g. `https://stickers.viber.com/pages/example` OR `https://stickers.viber.com/pages/custom-sticker-packs/example`)
74
75
  - Upload: Supported. Viber authentication data required for uploading Viber stickers, which could be fetched from Viber Desktop application automatically.
76
+ - Discord
77
+ - Download: Supported (e.g. `https://discord.com/channels/169256939211980800/@home` OR `169256939211980800`), but require user token.
78
+ - Upload: Not supported.
75
79
  - iMessage
76
80
  - Download: Not supported.
77
81
  - Upload: The program can create Xcode project for iMessage sticker pack, which could then be compiled and sideloaded using Xcode.
@@ -92,31 +96,15 @@
92
96
  To run in CLI mode, pass on any arguments
93
97
 
94
98
  ```
95
- usage: sticker-convert.py [-h] [--version] [--no-confirm] [--no-progress] [--custom-presets CUSTOM_PRESETS]
96
- [--input-dir INPUT_DIR]
97
- [--download-auto DOWNLOAD_AUTO | --download-signal DOWNLOAD_SIGNAL | --download-telegram DOWNLOAD_TELEGRAM | --download-line DOWNLOAD_LINE | --download-kakao DOWNLOAD_KAKAO | --download-viber DOWNLOAD_VIBER]
98
- [--output-dir OUTPUT_DIR] [--author AUTHOR] [--title TITLE]
99
- [--export-signal | --export-telegram | --export-telegram-emoji | --export-whatsapp | --export-viber | --export-imessage]
100
- [--no-compress]
101
- [--preset {auto,signal,telegram,telegram_emoji,whatsapp,line,kakao,viber,imessage_small,imessage_medium,imessage_large,custom}]
102
- [--steps STEPS] [--processes PROCESSES] [--fps-min FPS_MIN] [--fps-max FPS_MAX]
103
- [--fps-power FPS_POWER] [--res-min RES_MIN] [--res-max RES_MAX] [--res-w-min RES_W_MIN]
104
- [--res-w-max RES_W_MAX] [--res-h-min RES_H_MIN] [--res-h-max RES_H_MAX]
105
- [--res-power RES_POWER] [--quality-min QUALITY_MIN] [--quality-max QUALITY_MAX]
106
- [--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]
108
- [--padding-percent PADDING_PERCENT] [--bg-color BG_COLOR] [--vid-size-max VID_SIZE_MAX]
109
- [--img-size-max IMG_SIZE_MAX] [--vid-format VID_FORMAT] [--img-format IMG_FORMAT]
110
- [--fake-vid] [--scale-filter SCALE_FILTER] [--quantize-method QUANTIZE_METHOD]
111
- [--cache-dir CACHE_DIR] [--default-emoji DEFAULT_EMOJI] [--signal-uuid SIGNAL_UUID]
112
- [--signal-password SIGNAL_PASSWORD] [--signal-get-auth]
113
- [--signal-data-dir SIGNAL_DATA_DIR] [--telegram-token TELEGRAM_TOKEN]
114
- [--telegram-userid TELEGRAM_USERID] [--kakao-auth-token KAKAO_AUTH_TOKEN]
115
- [--kakao-get-auth] [--kakao-username KAKAO_USERNAME] [--kakao-password KAKAO_PASSWORD]
116
- [--kakao-country-code KAKAO_COUNTRY_CODE] [--kakao-phone-number KAKAO_PHONE_NUMBER]
117
- [--line-get-auth] [--line-cookies LINE_COOKIES] [--viber-auth VIBER_AUTH]
118
- [--viber-get-auth VIBER_GET_AUTH] [--viber-bin-path VIBER_BIN_PATH]
119
- [--save-cred SAVE_CRED]
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]
101
+ [--output-dir OUTPUT_DIR] [--author AUTHOR] [--title TITLE] [--export-signal | --export-telegram | --export-telegram-emoji | --export-viber | --export-whatsapp | --export-imessage] [--no-compress]
102
+ [--preset {auto,signal,telegram,telegram_emoji,whatsapp,line,kakao,viber,discord,discord_emoji,imessage_small,imessage_medium,imessage_large,custom}] [--steps STEPS] [--processes PROCESSES] [--fps-min FPS_MIN] [--fps-max FPS_MAX] [--fps-power FPS_POWER]
103
+ [--res-min RES_MIN] [--res-max RES_MAX] [--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] [--quality-min QUALITY_MIN] [--quality-max QUALITY_MAX] [--quality-power QUALITY_POWER]
104
+ [--color-min COLOR_MIN] [--color-max COLOR_MAX] [--color-power COLOR_POWER] [--duration-min DURATION_MIN] [--duration-max DURATION_MAX] [--padding-percent PADDING_PERCENT] [--bg-color BG_COLOR] [--vid-size-max VID_SIZE_MAX] [--img-size-max IMG_SIZE_MAX]
105
+ [--vid-format VID_FORMAT] [--img-format IMG_FORMAT] [--fake-vid] [--scale-filter SCALE_FILTER] [--quantize-method QUANTIZE_METHOD] [--cache-dir CACHE_DIR] [--default-emoji DEFAULT_EMOJI] [--signal-uuid SIGNAL_UUID] [--signal-password SIGNAL_PASSWORD] [--signal-get-auth]
106
+ [--telegram-token TELEGRAM_TOKEN] [--telegram-userid TELEGRAM_USERID] [--kakao-auth-token KAKAO_AUTH_TOKEN] [--kakao-get-auth] [--kakao-username KAKAO_USERNAME] [--kakao-password KAKAO_PASSWORD] [--kakao-country-code KAKAO_COUNTRY_CODE]
107
+ [--kakao-phone-number KAKAO_PHONE_NUMBER] [--line-get-auth] [--line-cookies LINE_COOKIES] [--viber-auth VIBER_AUTH] [--viber-get-auth VIBER_GET_AUTH] [--viber-bin-path VIBER_BIN_PATH] [--discord-get-auth] [--discord-token DISCORD_TOKEN] [--save-cred SAVE_CRED]
120
108
 
121
109
  CLI for stickers-convert
122
110
 
@@ -155,6 +143,14 @@ Input options:
155
143
  Download viber stickers from a URL as input
156
144
  (Example: https://stickers.viber.com/pages/example
157
145
  OR https://stickers.viber.com/pages/custom-sticker-packs/example)
146
+ --download-discord DOWNLOAD_DISCORD
147
+ Download discord stickers from a channel URL / ID as input
148
+ (Example: https://discord.com/channels/169256939211980800/@home
149
+ OR 169256939211980800)
150
+ --download-discord-emoji DOWNLOAD_DISCORD_EMOJI
151
+ Download discord emojis from a channel URL / ID as input
152
+ (Example: https://discord.com/channels/169256939211980800/@home
153
+ OR 169256939211980800)
158
154
 
159
155
  Output options:
160
156
  --output-dir OUTPUT_DIR
@@ -165,13 +161,13 @@ Output options:
165
161
  --export-telegram Upload to Telegram
166
162
  --export-telegram-emoji
167
163
  Upload to Telegram (Custom emoji)
168
- --export-whatsapp Create a .wastickers file for uploading to WhatsApp
169
164
  --export-viber Upload to Viber
165
+ --export-whatsapp Create a .wastickers file for uploading to WhatsApp
170
166
  --export-imessage Create Xcode project for importing to iMessage
171
167
 
172
168
  Compression options:
173
169
  --no-compress Do not compress files. Useful for only downloading stickers.
174
- --preset {auto,signal,telegram,telegram_emoji,whatsapp,line,kakao,viber,imessage_small,imessage_medium,imessage_large,custom}
170
+ --preset {auto,signal,telegram,telegram_emoji,whatsapp,line,kakao,viber,discord,discord_emoji,imessage_small,imessage_medium,imessage_large,custom}
175
171
  Apply preset for compression.
176
172
  --steps STEPS Set number of divisions between min and max settings.
177
173
  Steps higher = Slower but yields file more closer to the specified file size limit.
@@ -255,9 +251,6 @@ Credentials options:
255
251
  --signal-password SIGNAL_PASSWORD
256
252
  Set Signal password. Required for uploading Signal stickers.
257
253
  --signal-get-auth Generate Signal uuid and password.
258
- --signal-data-dir SIGNAL_DATA_DIR
259
- Optionally specify Signal data directory
260
- for getting uuid and password. Useful for portable Signal.
261
254
  --telegram-token TELEGRAM_TOKEN
262
255
  Set Telegram token. Required for uploading and downloading Telegram stickers.
263
256
  --telegram-userid TELEGRAM_USERID
@@ -293,6 +286,9 @@ Credentials options:
293
286
  --viber-bin-path VIBER_BIN_PATH
294
287
  Specify location of Viber Desktop application.
295
288
  Useful for portable installation.
289
+ --discord-get-auth Get Discord token.
290
+ --discord-token DISCORD_TOKEN
291
+ Set Discord token. Required for downloading Discord stickers and emojis.
296
292
  --save-cred SAVE_CRED
297
293
  Save Signal and Telegram credentials.
298
294
  ```
@@ -405,6 +401,7 @@ See [docs/COMPILING.md](docs/COMPILING.md)
405
401
  - [Line](docs/guide_line.md)
406
402
  - [Kakao](docs/guide_kakao.md)
407
403
  - [Viber](docs/guide_viber.md)
404
+ - [Discord](docs/guide_discord.md)
408
405
  - [iMessage](docs/guide_imessage.md)
409
406
 
410
407
  ### Conversion is slow
@@ -465,5 +462,5 @@ See [docs/TODO.md](docs/TODO.md)
465
462
  - Banner generated from [GitHub Socialify](https://socialify.git.ci/)
466
463
 
467
464
  ## DISCLAIMER
468
- - The author of this repo is NOT affiliated with Signal, Telegram, WhatsApp, Line, Kakao, Viber, iMessage or Sticker Maker.
465
+ - The author of this repo is NOT affiliated with Signal, Telegram, WhatsApp, Line, Kakao, Viber, Discord, iMessage or Sticker Maker.
469
466
  - The author of this repo is NOT repsonsible for any legal consequences and loss incurred from using this repo.
@@ -1,10 +1,10 @@
1
1
  [project]
2
2
  name = "sticker-convert"
3
- description = "Convert (animated) stickers to/from WhatsApp, Telegram, Signal, Line, Kakao, Viber, iMessage. Written in Python."
3
+ description = "Convert (animated) stickers to/from WhatsApp, Telegram, Signal, Line, Kakao, Viber, Discord, iMessage. Written in Python."
4
4
  readme = "README.md"
5
5
  requires-python = ">=3.8"
6
6
  license = {file = "LICENSE"}
7
- keywords = ["telegram", "line", "tgs", "whatsapp", "kakao", "signal", "imessage", "wastickers", "viber"]
7
+ keywords = ["telegram", "line", "tgs", "whatsapp", "kakao", "signal", "imessage", "wastickers", "viber", "discord"]
8
8
  authors = [
9
9
  {name = "laggykiller", email = "chaudominic2@gmail.com" } # Optional
10
10
  ]
@@ -4,6 +4,7 @@ apngasm_python~=1.3.1
4
4
  av~=12.3.0
5
5
  beautifulsoup4~=4.12.3
6
6
  rookiepy~=0.5.2
7
+ httpx~=0.27.0
7
8
  imagequant~=1.1.1
8
9
  memory-tempfile~=2.2.3
9
10
  mergedeep~=1.3.4
@@ -17,6 +18,6 @@ PyMemoryEditor~=1.5.22
17
18
  requests~=2.32.3
18
19
  rlottie_python~=1.3.6
19
20
  signalstickers-client-fork-laggykiller~=3.3.0.post2
20
- sqlcipher3-wheels~=0.5.2.post1
21
- tqdm~=4.66.4
21
+ tqdm~=4.66.5
22
22
  ttkbootstrap-fork-laggykiller~=1.5.1
23
+ websocket_client~=1.8.0
@@ -14,6 +14,7 @@ from mergedeep import merge # type: ignore
14
14
  from sticker_convert.definitions import CONFIG_DIR, DEFAULT_DIR
15
15
  from sticker_convert.job import Job
16
16
  from sticker_convert.job_option import CompOption, CredOption, InputOption, OutputOption
17
+ from sticker_convert.utils.auth.get_discord_auth import GetDiscordAuth
17
18
  from sticker_convert.utils.auth.get_kakao_auth import GetKakaoAuth
18
19
  from sticker_convert.utils.auth.get_line_auth import GetLineAuth
19
20
  from sticker_convert.utils.auth.get_signal_auth import GetSignalAuth
@@ -164,7 +165,12 @@ class CLI:
164
165
  )
165
166
 
166
167
  parser_cred = parser.add_argument_group("Credentials options")
167
- flags_cred_bool = ("signal_get_auth", "kakao_get_auth", "line_get_auth")
168
+ flags_cred_bool = (
169
+ "signal_get_auth",
170
+ "kakao_get_auth",
171
+ "line_get_auth",
172
+ "discord_get_auth",
173
+ )
168
174
  for k, v in self.help["cred"].items():
169
175
  keyword_args = {}
170
176
  if k in flags_cred_bool:
@@ -220,6 +226,8 @@ class CLI:
220
226
  "telegram": args.download_telegram,
221
227
  "kakao": args.download_kakao,
222
228
  "viber": args.download_viber,
229
+ "discord": args.download_discord,
230
+ "discord_emoji": args.download_discord_emoji,
223
231
  }
224
232
 
225
233
  download_option = "local"
@@ -456,6 +464,9 @@ class CLI:
456
464
  viber_auth=args.viber_auth
457
465
  if args.viber_auth
458
466
  else creds.get("viber", {}).get("auth"),
467
+ discord_token=args.discord_token
468
+ if args.discord_token
469
+ else creds.get("discord", {}).get("token"),
459
470
  )
460
471
 
461
472
  if args.kakao_get_auth:
@@ -473,23 +484,16 @@ class CLI:
473
484
  self.cb.msg(f"Got auth_token successfully: {auth_token}")
474
485
 
475
486
  if args.signal_get_auth:
476
- get_signal_auth = GetSignalAuth()
477
-
478
- signal_bin_path = None
479
- signal_user_data_dir = None
480
- if args.signal_data_dir:
481
- signal_bin_path = "(User specified)"
482
- signal_user_data_dir = args.signal_data_dir
483
-
484
- uuid, password, msg = get_signal_auth.get_cred(
485
- signal_bin_path, signal_user_data_dir
486
- )
487
+ m = GetSignalAuth(cb_msg=self.cb.msg, cb_ask_str=self.cb.ask_str)
487
488
 
489
+ uuid, password = m.get_cred()
488
490
  if uuid and password:
489
491
  opt_cred.signal_uuid = uuid
490
492
  opt_cred.signal_password = password
491
493
 
492
- self.cb.msg(msg)
494
+ self.cb.msg(f"Got uuid and password successfully: {uuid}, {password}")
495
+
496
+ self.cb.msg("Failed to get uuid and password")
493
497
 
494
498
  if args.line_get_auth:
495
499
  get_line_auth = GetLineAuth()
@@ -519,6 +523,15 @@ class CLI:
519
523
 
520
524
  self.cb.msg(msg)
521
525
 
526
+ if args.discord_get_auth:
527
+ get_discord_auth = GetDiscordAuth(self.cb.msg)
528
+ discord_token, msg = get_discord_auth.get_cred()
529
+
530
+ if discord_token:
531
+ opt_cred.discord_token = discord_token
532
+
533
+ self.cb.msg(msg)
534
+
522
535
  if args.save_cred:
523
536
  creds_path = CONFIG_DIR / "creds.json"
524
537
  JsonManager.save_json(creds_path, opt_cred.to_dict())
@@ -6,23 +6,24 @@ from pathlib import Path
6
6
  from typing import Any, List, Optional, Tuple
7
7
 
8
8
  import anyio
9
+ import httpx
9
10
  import requests
10
11
 
11
- from sticker_convert.job_option import CredOption
12
+ from sticker_convert.job_option import CredOption, InputOption
12
13
  from sticker_convert.utils.callback import CallbackProtocol, CallbackReturn
13
14
 
14
15
 
15
16
  class DownloadBase:
16
17
  def __init__(
17
18
  self,
18
- url: str,
19
- out_dir: Path,
19
+ opt_input: InputOption,
20
20
  opt_cred: Optional[CredOption],
21
21
  cb: CallbackProtocol,
22
22
  cb_return: CallbackReturn,
23
23
  ) -> None:
24
- self.url = url
25
- self.out_dir = out_dir
24
+ self.url = opt_input.url
25
+ self.out_dir = opt_input.dir
26
+ self.input_option = opt_input.option
26
27
  self.opt_cred = opt_cred
27
28
  self.cb = cb
28
29
  self.cb_return = cb_return
@@ -42,36 +43,32 @@ class DownloadBase:
42
43
  ("bar", None, {"set_progress_mode": "determinate", "steps": len(targets)})
43
44
  )
44
45
 
45
- async with anyio.create_task_group() as tg:
46
- for url, dest in targets:
47
- tg.start_soon(self.download_file_async, url, dest, retries, **kwargs)
46
+ async with httpx.AsyncClient() as client:
47
+ async with anyio.create_task_group() as tg:
48
+ for url, dest in targets:
49
+ tg.start_soon(
50
+ self.download_file_async, client, url, dest, retries, **kwargs
51
+ )
48
52
 
49
53
  async def download_file_async(
50
54
  self,
55
+ client: httpx.AsyncClient,
51
56
  url: str,
52
57
  dest: Path,
53
58
  retries: int = 3,
54
59
  **kwargs: Any,
55
60
  ) -> None:
61
+ self.cb.put(f"Downloading {url}")
56
62
  for retry in range(retries):
57
- try:
58
- response = requests.get(url, allow_redirects=True, **kwargs)
59
-
60
- if not response.ok:
61
- self.cb.put("update_bar")
62
- raise requests.exceptions.RequestException(
63
- f"Error {response.status_code}"
64
- )
63
+ response = await client.get(url, follow_redirects=True, **kwargs)
65
64
 
66
- self.cb.put(f"Downloading {url}")
67
- with open(dest, "wb+") as f:
68
- f.write(response.content)
65
+ if response.is_success:
66
+ async with await anyio.open_file(dest, "wb+") as f:
67
+ await f.write(response.content)
69
68
  self.cb.put(f"Downloaded {url}")
70
- break
71
-
72
- except requests.exceptions.RequestException as e:
69
+ else:
73
70
  self.cb.put(
74
- f"Cannot download {url} (tried {retry+1}/{retries} times): {e}"
71
+ f"Error {response.status_code}: {url} (tried {retry+1}/{retries} times)"
75
72
  )
76
73
 
77
74
  self.cb.put("update_bar")
@@ -0,0 +1,91 @@
1
+ #!/usr/bin/env python3
2
+ import json
3
+ from pathlib import Path
4
+ from typing import Dict, List, Optional, Tuple, cast
5
+ from urllib.parse import urlparse
6
+
7
+ import requests
8
+
9
+ from sticker_convert.downloaders.download_base import DownloadBase
10
+ from sticker_convert.job_option import CredOption, InputOption
11
+ from sticker_convert.utils.callback import CallbackProtocol, CallbackReturn
12
+ from sticker_convert.utils.emoji import extract_emojis
13
+ from sticker_convert.utils.files.metadata_handler import MetadataHandler
14
+
15
+ # References:
16
+ # https://github.com/ThaTiemsz/Discord-Emoji-Downloader/blob/master/assets/app.js
17
+ # https://github.com/zgibberish/discord-emoji-scraper/blob/main/emoji_scraper.py
18
+
19
+
20
+ class DownloadDiscord(DownloadBase):
21
+ # def __init__(self, *args: Any, **kwargs: Any) -> None:
22
+ # super().__init__(*args, **kwargs)
23
+
24
+ def download_stickers_discord(self) -> bool:
25
+ if self.opt_cred is None or self.opt_cred.discord_token == "":
26
+ self.cb.put("Error: Downloading from Discord requires token")
27
+ return False
28
+
29
+ gid: Optional[str] = None
30
+ if self.url.isnumeric():
31
+ gid = self.url
32
+ else:
33
+ url_parsed = urlparse(self.url)
34
+ if url_parsed.netloc == "discord.com":
35
+ gid = url_parsed.path.split("/")[2]
36
+
37
+ if gid is None or gid.isnumeric() is False:
38
+ self.cb.put("Error: Invalid url")
39
+ return False
40
+
41
+ headers = {
42
+ "Authorization": self.opt_cred.discord_token,
43
+ }
44
+
45
+ r = requests.get(f"https://discord.com/api/v10/guilds/{gid}", headers=headers)
46
+ r_json = json.loads(r.text)
47
+
48
+ if self.input_option == "discord_emoji":
49
+ stickers = r_json["emojis"]
50
+ else:
51
+ stickers = r_json["stickers"]
52
+
53
+ targets: List[Tuple[str, Path]] = []
54
+ emoji_dict: Dict[str, str] = {}
55
+ for i, sticker in enumerate(stickers):
56
+ f_id = str(i).zfill(3)
57
+ sticker_id = sticker["id"]
58
+ if self.input_option == "discord_emoji":
59
+ f_ext = ".gif" if sticker["animated"] else ".png"
60
+ sticker_url = f"https://cdn.discordapp.com/emojis/{sticker_id}{f_ext}?size=4096&quality=lossless"
61
+ else:
62
+ # https://discord.com/developers/docs/resources/sticker#sticker-object-sticker-format-types
63
+ format_type = cast(int, sticker["format_type"])
64
+ f_ext = [".png", ".png", ".json", ".gif"][format_type - 1]
65
+ sticker_url = f"https://cdn.discordapp.com/stickers/{sticker_id}{f_ext}?size=4096&quality=lossless"
66
+ emoji_dict[f_id] = extract_emojis(sticker["tags"])
67
+ f_name = f_id + f_ext
68
+ f_path = Path(self.out_dir, f_name)
69
+ targets.append((sticker_url, f_path))
70
+
71
+ self.download_multiple_files(targets)
72
+
73
+ server_name = r_json["name"]
74
+ MetadataHandler.set_metadata(
75
+ self.out_dir,
76
+ title=server_name,
77
+ author=server_name,
78
+ emoji_dict=emoji_dict if self.input_option == "discord" else None,
79
+ )
80
+
81
+ return True
82
+
83
+ @staticmethod
84
+ def start(
85
+ opt_input: InputOption,
86
+ opt_cred: Optional[CredOption],
87
+ cb: CallbackProtocol,
88
+ cb_return: CallbackReturn,
89
+ ) -> bool:
90
+ downloader = DownloadDiscord(opt_input, opt_cred, cb, cb_return)
91
+ return downloader.download_stickers_discord()