sticker-convert 2.8.13__tar.gz → 2.9.0__tar.gz

Sign up to get free protection for your applications and to get access to all the features.
Files changed (115) hide show
  1. {sticker_convert-2.8.13/src/sticker_convert.egg-info → sticker_convert-2.9.0}/PKG-INFO +28 -15
  2. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/README.md +25 -13
  3. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/requirements.txt +2 -1
  4. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert/cli.py +18 -0
  5. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert/downloaders/download_kakao.py +35 -13
  6. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert/gui.py +9 -0
  7. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert/gui_components/frames/cred_frame.py +21 -0
  8. sticker_convert-2.9.0/src/sticker_convert/gui_components/windows/viber_get_auth_window.py +143 -0
  9. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert/job.py +8 -0
  10. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert/job_option.py +2 -0
  11. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert/resources/compression.json +2 -2
  12. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert/resources/help.json +3 -0
  13. sticker_convert-2.9.0/src/sticker_convert/resources/memdump.sh +26 -0
  14. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert/resources/output.json +8 -0
  15. sticker_convert-2.9.0/src/sticker_convert/uploaders/upload_viber.py +167 -0
  16. sticker_convert-2.9.0/src/sticker_convert/utils/auth/get_viber_auth.py +315 -0
  17. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert/utils/files/metadata_handler.py +1 -1
  18. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert/utils/media/format_verify.py +10 -14
  19. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert/version.py +1 -1
  20. {sticker_convert-2.8.13 → sticker_convert-2.9.0/src/sticker_convert.egg-info}/PKG-INFO +28 -15
  21. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert.egg-info/SOURCES.txt +4 -0
  22. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert.egg-info/requires.txt +2 -1
  23. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/tests/test_export.py +15 -1
  24. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/LICENSE +0 -0
  25. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/MANIFEST.in +0 -0
  26. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/pyproject.toml +0 -0
  27. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/setup.cfg +0 -0
  28. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert/__init__.py +0 -0
  29. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert/__main__.py +0 -0
  30. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert/converter.py +0 -0
  31. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert/definitions.py +0 -0
  32. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert/downloaders/__init__.py +0 -0
  33. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert/downloaders/download_base.py +0 -0
  34. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert/downloaders/download_line.py +0 -0
  35. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert/downloaders/download_signal.py +0 -0
  36. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert/downloaders/download_telegram.py +0 -0
  37. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert/downloaders/download_viber.py +0 -0
  38. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert/gui_components/__init__.py +0 -0
  39. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert/gui_components/frames/__init__.py +0 -0
  40. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert/gui_components/frames/comp_frame.py +0 -0
  41. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert/gui_components/frames/config_frame.py +0 -0
  42. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert/gui_components/frames/control_frame.py +0 -0
  43. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert/gui_components/frames/input_frame.py +0 -0
  44. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert/gui_components/frames/output_frame.py +0 -0
  45. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert/gui_components/frames/progress_frame.py +0 -0
  46. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert/gui_components/frames/right_clicker.py +0 -0
  47. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert/gui_components/gui_utils.py +0 -0
  48. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert/gui_components/windows/__init__.py +0 -0
  49. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert/gui_components/windows/advanced_compression_window.py +0 -0
  50. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert/gui_components/windows/base_window.py +0 -0
  51. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert/gui_components/windows/kakao_get_auth_window.py +0 -0
  52. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert/gui_components/windows/line_get_auth_window.py +0 -0
  53. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert/gui_components/windows/signal_get_auth_window.py +0 -0
  54. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert/ios-message-stickers-template/.github/FUNDING.yml +0 -0
  55. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert/ios-message-stickers-template/.gitignore +0 -0
  56. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert/ios-message-stickers-template/README.md +0 -0
  57. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert/ios-message-stickers-template/stickers/Info.plist +0 -0
  58. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Info.plist +0 -0
  59. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/Contents.json +0 -0
  60. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/Sticker Pack.stickerpack/Contents.json +0 -0
  61. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/Sticker Pack.stickerpack/Sticker 1.sticker/Contents.json +0 -0
  62. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/Sticker Pack.stickerpack/Sticker 1.sticker/Sticker 1.png +0 -0
  63. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/Sticker Pack.stickerpack/Sticker 2.sticker/Contents.json +0 -0
  64. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/Sticker Pack.stickerpack/Sticker 2.sticker/Sticker 2.png +0 -0
  65. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/Sticker Pack.stickerpack/Sticker 3.sticker/Contents.json +0 -0
  66. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/Sticker Pack.stickerpack/Sticker 3.sticker/Sticker 3.png +0 -0
  67. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/App-Store-1024x1024pt.png +0 -0
  68. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Contents.json +0 -0
  69. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Messages-App-Store-1024x768pt.png +0 -0
  70. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Messages-iPad-67x50pt@2x.png +0 -0
  71. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Messages-iPad-Pro-74x55pt@2x.png +0 -0
  72. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Messages-iPhone-60x45pt@2x.png +0 -0
  73. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Messages-iPhone-60x45pt@3x.png +0 -0
  74. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Messages27x20pt@2x.png +0 -0
  75. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Messages27x20pt@3x.png +0 -0
  76. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Messages32x24pt@2x.png +0 -0
  77. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Messages32x24pt@3x.png +0 -0
  78. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/iPad-Settings-29pt@2x.png +0 -0
  79. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/iPhone-Settings-29pt@3x.png +0 -0
  80. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/iPhone-settings-29pt@2x.png +0 -0
  81. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert/ios-message-stickers-template/stickers.xcodeproj/project.pbxproj +0 -0
  82. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert/ios-message-stickers-template/stickers.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -0
  83. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert/ios-message-stickers-template/stickers.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -0
  84. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert/ios-message-stickers-template/stickers.xcodeproj/project.xcworkspace/xcuserdata/niklaspeterson.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  85. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert/ios-message-stickers-template/stickers.xcodeproj/xcuserdata/niklaspeterson.xcuserdatad/xcschemes/xcschememanagement.plist +0 -0
  86. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert/resources/NotoColorEmoji.ttf +0 -0
  87. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert/resources/appicon.icns +0 -0
  88. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert/resources/appicon.ico +0 -0
  89. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert/resources/appicon.png +0 -0
  90. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert/resources/emoji.json +0 -0
  91. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert/resources/input.json +0 -0
  92. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert/uploaders/__init__.py +0 -0
  93. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert/uploaders/compress_wastickers.py +0 -0
  94. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert/uploaders/upload_base.py +0 -0
  95. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert/uploaders/upload_signal.py +0 -0
  96. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert/uploaders/upload_telegram.py +0 -0
  97. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert/uploaders/xcode_imessage.py +0 -0
  98. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert/utils/auth/get_kakao_auth.py +0 -0
  99. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert/utils/auth/get_line_auth.py +0 -0
  100. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert/utils/auth/get_signal_auth.py +0 -0
  101. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert/utils/callback.py +0 -0
  102. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert/utils/files/cache_store.py +0 -0
  103. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert/utils/files/json_manager.py +0 -0
  104. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert/utils/files/json_resources_loader.py +0 -0
  105. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert/utils/files/run_bin.py +0 -0
  106. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert/utils/files/sanitize_filename.py +0 -0
  107. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert/utils/media/apple_png_normalize.py +0 -0
  108. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert/utils/media/codec_info.py +0 -0
  109. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert/utils/media/decrypt_kakao.py +0 -0
  110. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert/utils/url_detect.py +0 -0
  111. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert.egg-info/dependency_links.txt +0 -0
  112. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert.egg-info/entry_points.txt +0 -0
  113. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/src/sticker_convert.egg-info/top_level.txt +0 -0
  114. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/tests/test_compression.py +0 -0
  115. {sticker_convert-2.8.13 → sticker_convert-2.9.0}/tests/test_download.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: sticker-convert
3
- Version: 2.8.13
3
+ Version: 2.9.0
4
4
  Summary: Convert (animated) stickers to/from WhatsApp, Telegram, Signal, Line, Kakao, Viber, iMessage. Written in Python.
5
5
  Author-email: laggykiller <chaudominic2@gmail.com>
6
6
  Maintainer-email: laggykiller <chaudominic2@gmail.com>
@@ -371,13 +371,14 @@ Requires-Dist: av~=12.1.0
371
371
  Requires-Dist: beautifulsoup4~=4.12.3
372
372
  Requires-Dist: rookiepy~=0.5.1
373
373
  Requires-Dist: imagequant~=1.1.1
374
- Requires-Dist: js2py~=0.74
375
374
  Requires-Dist: memory-tempfile~=2.2.3
376
375
  Requires-Dist: mergedeep~=1.3.4
377
376
  Requires-Dist: numpy>=1.22.4
378
377
  Requires-Dist: Pillow~=10.3.0
379
378
  Requires-Dist: pyoxipng~=9.0.0
380
379
  Requires-Dist: python-telegram-bot~=21.2
380
+ Requires-Dist: psutil~=5.9.8
381
+ Requires-Dist: PyMemoryEditor~=1.5.22
381
382
  Requires-Dist: requests~=2.32.3
382
383
  Requires-Dist: rlottie_python~=1.3.5
383
384
  Requires-Dist: signalstickers-client-fork-laggykiller~=3.3.0.post2
@@ -483,24 +484,27 @@ usage: sticker-convert.py [-h] [--version] [--no-confirm] [--no-progress] [--cus
483
484
  [--input-dir INPUT_DIR]
484
485
  [--download-auto DOWNLOAD_AUTO | --download-signal DOWNLOAD_SIGNAL | --download-telegram DOWNLOAD_TELEGRAM | --download-line DOWNLOAD_LINE | --download-kakao DOWNLOAD_KAKAO | --download-viber DOWNLOAD_VIBER]
485
486
  [--output-dir OUTPUT_DIR] [--author AUTHOR] [--title TITLE]
486
- [--export-signal | --export-telegram | --export-telegram-emoji | --export-whatsapp | --export-imessage]
487
+ [--export-signal | --export-telegram | --export-telegram-emoji | --export-whatsapp | --export-viber | --export-imessage]
487
488
  [--no-compress]
488
489
  [--preset {auto,signal,telegram,telegram_emoji,whatsapp,line,kakao,viber,imessage_small,imessage_medium,imessage_large,custom}]
489
490
  [--steps STEPS] [--processes PROCESSES] [--fps-min FPS_MIN] [--fps-max FPS_MAX]
490
491
  [--fps-power FPS_POWER] [--res-min RES_MIN] [--res-max RES_MAX] [--res-w-min RES_W_MIN]
491
- [--res-w-max RES_W_MAX] [--res-h-min RES_H_MIN] [--res-h-max RES_H_MAX] [--res-power RES_POWER]
492
- [--quality-min QUALITY_MIN] [--quality-max QUALITY_MAX] [--quality-power QUALITY_POWER]
493
- [--color-min COLOR_MIN] [--color-max COLOR_MAX] [--color-power COLOR_POWER]
494
- [--duration-min DURATION_MIN] [--duration-max DURATION_MAX] [--padding-percent PADDING_PERCENT]
495
- [--bg-color BG_COLOR] [--vid-size-max VID_SIZE_MAX] [--img-size-max IMG_SIZE_MAX]
496
- [--vid-format VID_FORMAT] [--img-format IMG_FORMAT] [--fake-vid] [--scale-filter SCALE_FILTER]
497
- [--quantize-method QUANTIZE_METHOD] [--cache-dir CACHE_DIR] [--default-emoji DEFAULT_EMOJI]
498
- [--signal-uuid SIGNAL_UUID] [--signal-password SIGNAL_PASSWORD] [--signal-get-auth]
492
+ [--res-w-max RES_W_MAX] [--res-h-min RES_H_MIN] [--res-h-max RES_H_MAX]
493
+ [--res-power RES_POWER] [--quality-min QUALITY_MIN] [--quality-max QUALITY_MAX]
494
+ [--quality-power QUALITY_POWER] [--color-min COLOR_MIN] [--color-max COLOR_MAX]
495
+ [--color-power COLOR_POWER] [--duration-min DURATION_MIN] [--duration-max DURATION_MAX]
496
+ [--padding-percent PADDING_PERCENT] [--bg-color BG_COLOR] [--vid-size-max VID_SIZE_MAX]
497
+ [--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]
499
+ [--cache-dir CACHE_DIR] [--default-emoji DEFAULT_EMOJI] [--signal-uuid SIGNAL_UUID]
500
+ [--signal-password SIGNAL_PASSWORD] [--signal-get-auth]
499
501
  [--signal-data-dir SIGNAL_DATA_DIR] [--telegram-token TELEGRAM_TOKEN]
500
- [--telegram-userid TELEGRAM_USERID] [--kakao-auth-token KAKAO_AUTH_TOKEN] [--kakao-get-auth]
501
- [--kakao-username KAKAO_USERNAME] [--kakao-password KAKAO_PASSWORD]
502
+ [--telegram-userid TELEGRAM_USERID] [--kakao-auth-token KAKAO_AUTH_TOKEN]
503
+ [--kakao-get-auth] [--kakao-username KAKAO_USERNAME] [--kakao-password KAKAO_PASSWORD]
502
504
  [--kakao-country-code KAKAO_COUNTRY_CODE] [--kakao-phone-number KAKAO_PHONE_NUMBER]
503
- [--line-get-auth] [--line-cookies LINE_COOKIES] [--save-cred SAVE_CRED]
505
+ [--line-get-auth] [--line-cookies LINE_COOKIES] [--viber-auth VIBER_AUTH]
506
+ [--viber-get-auth VIBER_GET_AUTH] [--viber-bin-path VIBER_BIN_PATH]
507
+ [--save-cred SAVE_CRED]
504
508
 
505
509
  CLI for stickers-convert
506
510
 
@@ -550,6 +554,7 @@ Output options:
550
554
  --export-telegram-emoji
551
555
  Upload to Telegram (Custom emoji)
552
556
  --export-whatsapp Create a .wastickers file for uploading to WhatsApp
557
+ --export-viber Upload to Viber
553
558
  --export-imessage Create Xcode project for importing to iMessage
554
559
 
555
560
  Compression options:
@@ -668,6 +673,14 @@ Credentials options:
668
673
  --line-get-auth Get Line cookies from browser, which is required to create custom message stickers.
669
674
  --line-cookies LINE_COOKIES
670
675
  Set Line cookies, which is required to create custom message stickers.
676
+ --viber-auth VIBER_AUTH
677
+ Set Viber authentication data.
678
+ Required for uploading Viber stickers.
679
+ --viber-get-auth VIBER_GET_AUTH
680
+ Generate Viber authentication data.
681
+ --viber-bin-path VIBER_BIN_PATH
682
+ Specify location of Viber Desktop application.
683
+ Useful for portable installation.
671
684
  --save-cred SAVE_CRED
672
685
  Save Signal and Telegram credentials.
673
686
  ```
@@ -840,5 +853,5 @@ See [docs/TODO.md](docs/TODO.md)
840
853
  - Banner generated from [GitHub Socialify](https://socialify.git.ci/)
841
854
 
842
855
  ## DISCLAIMER
843
- - The author of this repo is NOT affiliated with Signal, Telegram, WhatsApp, Line, Kakao or Sticker Maker.
856
+ - The author of this repo is NOT affiliated with Signal, Telegram, WhatsApp, Line, Kakao, Viber, iMessage or Sticker Maker.
844
857
  - The author of this repo is NOT repsonsible for any legal consequences and loss incurred from using this repo.
@@ -96,24 +96,27 @@ usage: sticker-convert.py [-h] [--version] [--no-confirm] [--no-progress] [--cus
96
96
  [--input-dir INPUT_DIR]
97
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
98
  [--output-dir OUTPUT_DIR] [--author AUTHOR] [--title TITLE]
99
- [--export-signal | --export-telegram | --export-telegram-emoji | --export-whatsapp | --export-imessage]
99
+ [--export-signal | --export-telegram | --export-telegram-emoji | --export-whatsapp | --export-viber | --export-imessage]
100
100
  [--no-compress]
101
101
  [--preset {auto,signal,telegram,telegram_emoji,whatsapp,line,kakao,viber,imessage_small,imessage_medium,imessage_large,custom}]
102
102
  [--steps STEPS] [--processes PROCESSES] [--fps-min FPS_MIN] [--fps-max FPS_MAX]
103
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] [--res-power RES_POWER]
105
- [--quality-min QUALITY_MIN] [--quality-max QUALITY_MAX] [--quality-power QUALITY_POWER]
106
- [--color-min COLOR_MIN] [--color-max COLOR_MAX] [--color-power COLOR_POWER]
107
- [--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]
109
- [--vid-format VID_FORMAT] [--img-format IMG_FORMAT] [--fake-vid] [--scale-filter SCALE_FILTER]
110
- [--quantize-method QUANTIZE_METHOD] [--cache-dir CACHE_DIR] [--default-emoji DEFAULT_EMOJI]
111
- [--signal-uuid SIGNAL_UUID] [--signal-password SIGNAL_PASSWORD] [--signal-get-auth]
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]
112
113
  [--signal-data-dir SIGNAL_DATA_DIR] [--telegram-token TELEGRAM_TOKEN]
113
- [--telegram-userid TELEGRAM_USERID] [--kakao-auth-token KAKAO_AUTH_TOKEN] [--kakao-get-auth]
114
- [--kakao-username KAKAO_USERNAME] [--kakao-password KAKAO_PASSWORD]
114
+ [--telegram-userid TELEGRAM_USERID] [--kakao-auth-token KAKAO_AUTH_TOKEN]
115
+ [--kakao-get-auth] [--kakao-username KAKAO_USERNAME] [--kakao-password KAKAO_PASSWORD]
115
116
  [--kakao-country-code KAKAO_COUNTRY_CODE] [--kakao-phone-number KAKAO_PHONE_NUMBER]
116
- [--line-get-auth] [--line-cookies LINE_COOKIES] [--save-cred SAVE_CRED]
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]
117
120
 
118
121
  CLI for stickers-convert
119
122
 
@@ -163,6 +166,7 @@ Output options:
163
166
  --export-telegram-emoji
164
167
  Upload to Telegram (Custom emoji)
165
168
  --export-whatsapp Create a .wastickers file for uploading to WhatsApp
169
+ --export-viber Upload to Viber
166
170
  --export-imessage Create Xcode project for importing to iMessage
167
171
 
168
172
  Compression options:
@@ -281,6 +285,14 @@ Credentials options:
281
285
  --line-get-auth Get Line cookies from browser, which is required to create custom message stickers.
282
286
  --line-cookies LINE_COOKIES
283
287
  Set Line cookies, which is required to create custom message stickers.
288
+ --viber-auth VIBER_AUTH
289
+ Set Viber authentication data.
290
+ Required for uploading Viber stickers.
291
+ --viber-get-auth VIBER_GET_AUTH
292
+ Generate Viber authentication data.
293
+ --viber-bin-path VIBER_BIN_PATH
294
+ Specify location of Viber Desktop application.
295
+ Useful for portable installation.
284
296
  --save-cred SAVE_CRED
285
297
  Save Signal and Telegram credentials.
286
298
  ```
@@ -453,5 +465,5 @@ See [docs/TODO.md](docs/TODO.md)
453
465
  - Banner generated from [GitHub Socialify](https://socialify.git.ci/)
454
466
 
455
467
  ## DISCLAIMER
456
- - The author of this repo is NOT affiliated with Signal, Telegram, WhatsApp, Line, Kakao or Sticker Maker.
468
+ - The author of this repo is NOT affiliated with Signal, Telegram, WhatsApp, Line, Kakao, Viber, iMessage or Sticker Maker.
457
469
  - The author of this repo is NOT repsonsible for any legal consequences and loss incurred from using this repo.
@@ -5,13 +5,14 @@ av~=12.1.0
5
5
  beautifulsoup4~=4.12.3
6
6
  rookiepy~=0.5.1
7
7
  imagequant~=1.1.1
8
- js2py~=0.74
9
8
  memory-tempfile~=2.2.3
10
9
  mergedeep~=1.3.4
11
10
  numpy>=1.22.4
12
11
  Pillow~=10.3.0
13
12
  pyoxipng~=9.0.0
14
13
  python-telegram-bot~=21.2
14
+ psutil~=5.9.8
15
+ PyMemoryEditor~=1.5.22
15
16
  requests~=2.32.3
16
17
  rlottie_python~=1.3.5
17
18
  signalstickers-client-fork-laggykiller~=3.3.0.post2
@@ -17,6 +17,7 @@ from sticker_convert.job_option import CompOption, CredOption, InputOption, Outp
17
17
  from sticker_convert.utils.auth.get_kakao_auth import GetKakaoAuth
18
18
  from sticker_convert.utils.auth.get_line_auth import GetLineAuth
19
19
  from sticker_convert.utils.auth.get_signal_auth import GetSignalAuth
20
+ from sticker_convert.utils.auth.get_viber_auth import GetViberAuth
20
21
  from sticker_convert.utils.callback import Callback
21
22
  from sticker_convert.utils.files.json_manager import JsonManager
22
23
  from sticker_convert.utils.url_detect import UrlDetect
@@ -452,6 +453,9 @@ class CLI:
452
453
  line_cookies=args.line_cookies
453
454
  if args.line_cookies
454
455
  else creds.get("line", {}).get("cookies"),
456
+ viber_auth=args.viber_auth
457
+ if args.viber_auth
458
+ else creds.get("viber", {}).get("auth"),
455
459
  )
456
460
 
457
461
  if args.kakao_get_auth:
@@ -501,6 +505,20 @@ class CLI:
501
505
  "Failed to get Line cookies. Have you logged in the web browser?"
502
506
  )
503
507
 
508
+ if args.viber_get_auth:
509
+ get_viber_auth = GetViberAuth(self.cb.ask_str)
510
+
511
+ viber_bin_path = None
512
+ if args.viber_bin_path:
513
+ viber_bin_path = args.viber_bin_path
514
+
515
+ viber_auth, msg = get_viber_auth.get_cred(viber_bin_path)
516
+
517
+ if viber_auth:
518
+ opt_cred.viber_auth = viber_auth
519
+
520
+ self.cb.msg(msg)
521
+
504
522
  if args.save_cred:
505
523
  creds_path = CONFIG_DIR / "creds.json"
506
524
  JsonManager.save_json(creds_path, opt_cred.to_dict())
@@ -3,13 +3,13 @@ from __future__ import annotations
3
3
 
4
4
  import itertools
5
5
  import json
6
+ import re
6
7
  import zipfile
7
8
  from io import BytesIO
8
9
  from pathlib import Path
9
10
  from typing import Any, List, Optional, Tuple, cast
10
11
  from urllib.parse import urlparse
11
12
 
12
- import js2py # type: ignore
13
13
  import requests
14
14
  from bs4 import BeautifulSoup
15
15
  from bs4.element import Tag
@@ -47,7 +47,7 @@ class MetadataKakao:
47
47
  headers = {"User-Agent": "Android"}
48
48
 
49
49
  response = requests.get(url, headers=headers)
50
- soup = BeautifulSoup(response.text, "html.parser")
50
+ soup = BeautifulSoup(response.content.decode("utf-8", "ignore"), "html.parser")
51
51
 
52
52
  pack_title_tag = soup.find("title") # type: ignore
53
53
  if not pack_title_tag:
@@ -72,17 +72,39 @@ class MetadataKakao:
72
72
  js = js[func_start_pos:]
73
73
  bracket_start_pos = js.find("{")
74
74
  func_end_pos = search_bracket(js[bracket_start_pos:]) + bracket_start_pos
75
- js = js[: func_end_pos + 1]
76
- web2app_start_pos = js.find("daumtools.web2app(")
77
- js = js[:web2app_start_pos] + "return a;}"
78
- get_item_code = js2py.eval_js(js) # type: ignore
79
- kakao_scheme_link = cast(
80
- str,
81
- get_item_code(
82
- "kakaotalk://store/emoticon/${i}?referer=share_link", item_code_fake
83
- ),
84
- )
85
- item_code = urlparse(kakao_scheme_link).path.split("/")[-1]
75
+ js = js[bracket_start_pos + 1 : func_end_pos]
76
+ js = js.split(";")[0]
77
+
78
+ minus_num_regex = re.search(r"\-(.*?)\^", js)
79
+ if not minus_num_regex:
80
+ return None, None
81
+ minus_num_str = minus_num_regex.group(1)
82
+ if not minus_num_str.isnumeric():
83
+ return None, None
84
+ minus_num = int(minus_num_str)
85
+
86
+ xor_num_regex = re.search(r"\^(.*?)\)", js)
87
+ if not xor_num_regex:
88
+ return None, None
89
+ xor_num_str = xor_num_regex.group(1)
90
+ if not xor_num_str.isnumeric():
91
+ return None, None
92
+ xor_num = int(xor_num_str)
93
+
94
+ item_code = str(int(item_code_fake) - minus_num ^ xor_num)
95
+
96
+ # https://github.com/Nuitka/Nuitka/issues/385
97
+ # js2py not working if compiled by nuitka
98
+ # web2app_start_pos = js.find("daumtools.web2app(")
99
+ # js = js[:web2app_start_pos] + "return a;}"
100
+ # get_item_code = js2py.eval_js(js) # type: ignore
101
+ # kakao_scheme_link = cast(
102
+ # str,
103
+ # get_item_code(
104
+ # "kakaotalk://store/emoticon/${i}?referer=share_link", item_code_fake
105
+ # ),
106
+ # )
107
+ # item_code = urlparse(kakao_scheme_link).path.split("/")[-1]
86
108
 
87
109
  return pack_title, item_code
88
110
 
@@ -159,6 +159,8 @@ class GUI(Window):
159
159
  self.kakao_country_code_var = StringVar(self)
160
160
  self.kakao_phone_number_var = StringVar(self)
161
161
  self.line_cookies_var = StringVar(self)
162
+ self.viber_auth_var = StringVar(self)
163
+ self.viber_bin_path_var = StringVar(self)
162
164
 
163
165
  # Config
164
166
  self.settings_save_cred_var = BooleanVar()
@@ -385,6 +387,7 @@ class GUI(Window):
385
387
  self.creds.get("kakao", {}).get("phone_number", "")
386
388
  )
387
389
  self.line_cookies_var.set(self.creds.get("line", {}).get("cookies", ""))
390
+ self.viber_auth_var.set(self.creds.get("viber", {}).get("auth", ""))
388
391
 
389
392
  def get_input_name(self) -> str:
390
393
  return [
@@ -545,6 +548,7 @@ class GUI(Window):
545
548
  kakao_country_code=self.kakao_country_code_var.get(),
546
549
  kakao_phone_number=self.kakao_phone_number_var.get(),
547
550
  line_cookies=self.line_cookies_var.get(),
551
+ viber_auth=self.viber_auth_var.get(),
548
552
  )
549
553
 
550
554
  def start_process(self) -> None:
@@ -771,6 +775,11 @@ class GUI(Window):
771
775
  else:
772
776
  self.cred_frame.telegram_userid_entry.config(bootstyle="default") # type: ignore
773
777
 
778
+ if output_option == "viber" and not self.viber_auth_var.get():
779
+ self.cred_frame.viber_auth_entry.config(bootstyle="warning") # type: ignore
780
+ else:
781
+ self.cred_frame.viber_auth_entry.config(bootstyle="default") # type: ignore
782
+
774
783
  if (
775
784
  urlparse(url).netloc == "e.kakao.com"
776
785
  and not self.kakao_auth_token_var.get()
@@ -8,6 +8,7 @@ from sticker_convert.gui_components.frames.right_clicker import RightClicker
8
8
  from sticker_convert.gui_components.windows.kakao_get_auth_window import KakaoGetAuthWindow
9
9
  from sticker_convert.gui_components.windows.line_get_auth_window import LineGetAuthWindow
10
10
  from sticker_convert.gui_components.windows.signal_get_auth_window import SignalGetAuthWindow
11
+ from sticker_convert.gui_components.windows.viber_get_auth_window import ViberGetAuthWindow
11
12
 
12
13
  if TYPE_CHECKING:
13
14
  from sticker_convert.gui import GUI # type: ignore
@@ -103,6 +104,20 @@ class CredFrame(LabelFrame):
103
104
  bootstyle="secondary", # type: ignore
104
105
  )
105
106
 
107
+ self.viber_auth_lbl = Label(
108
+ self, text="Viber auth", width=18, justify="left", anchor="w"
109
+ )
110
+ self.viber_auth_entry = Entry(
111
+ self, textvariable=self.gui.viber_auth_var, width=35
112
+ )
113
+ self.viber_auth_entry.bind("<Button-3><ButtonRelease-3>", RightClicker)
114
+ self.viber_get_auth_btn = Button(
115
+ self,
116
+ text="Generate",
117
+ command=self.cb_viber_get_auth,
118
+ bootstyle="secondary", # type: ignore
119
+ )
120
+
106
121
  self.help_btn = Button(
107
122
  self,
108
123
  text="Get help",
@@ -133,6 +148,9 @@ class CredFrame(LabelFrame):
133
148
  self.line_cookies_lbl.grid(column=0, row=6, sticky="w", padx=3, pady=3)
134
149
  self.line_cookies_entry.grid(column=1, row=6, sticky="w", padx=3, pady=3)
135
150
  self.line_get_auth_btn.grid(column=2, row=6, sticky="e", padx=3, pady=3)
151
+ self.viber_auth_lbl.grid(column=0, row=7, sticky="w", padx=3, pady=3)
152
+ self.viber_auth_entry.grid(column=1, row=7, sticky="w", padx=3, pady=3)
153
+ self.viber_get_auth_btn.grid(column=2, row=7, sticky="e", padx=3, pady=3)
136
154
  self.help_btn.grid(column=2, row=8, sticky="e", padx=3, pady=3)
137
155
 
138
156
  def cb_cred_help(self, *_: Any) -> None:
@@ -150,6 +168,9 @@ class CredFrame(LabelFrame):
150
168
  def cb_line_get_auth(self, *_: Any) -> None:
151
169
  LineGetAuthWindow(self.gui)
152
170
 
171
+ def cb_viber_get_auth(self, *_: Any) -> None:
172
+ ViberGetAuthWindow(self.gui)
173
+
153
174
  def set_states(self, state: str) -> None:
154
175
  self.signal_uuid_entry.config(state=state)
155
176
  self.signal_password_entry.config(state=state)
@@ -0,0 +1,143 @@
1
+ #!/usr/bin/env python3
2
+ import platform
3
+ from functools import partial
4
+ from pathlib import Path
5
+ from subprocess import Popen
6
+ from tkinter import filedialog
7
+ from typing import Any
8
+
9
+ from ttkbootstrap import Button, Entry, Frame, Label # type: ignore
10
+
11
+ from sticker_convert.gui_components.gui_utils import GUIUtils
12
+ from sticker_convert.gui_components.windows.base_window import BaseWindow
13
+ from sticker_convert.utils.auth.get_viber_auth import GetViberAuth
14
+
15
+
16
+ class ViberGetAuthWindow(BaseWindow):
17
+ def __init__(self, *args: Any, **kwargs: Any) -> None:
18
+ super().__init__(*args, **kwargs)
19
+
20
+ self.title("Get Viber auth data")
21
+
22
+ self.cb_msg_block_viber = partial(self.gui.cb_msg_block, parent=self)
23
+ self.cb_ask_str_viber = partial(self.gui.cb_ask_str, parent=self)
24
+
25
+ self.frame_info = Frame(self.scrollable_frame)
26
+ self.frame_btns = Frame(self.scrollable_frame)
27
+ self.frame_config = Frame(self.scrollable_frame)
28
+
29
+ self.frame_info.grid(column=0, row=0, sticky="news", padx=3, pady=3)
30
+ self.frame_btns.grid(column=0, row=1, sticky="news", padx=3, pady=3)
31
+ self.frame_config.grid(column=0, row=2, sticky="news", padx=3, pady=3)
32
+
33
+ # Info frame
34
+ self.explanation_lbl0 = Label(
35
+ self.frame_info,
36
+ text="Please install Viber Desktop and login first.",
37
+ justify="left",
38
+ anchor="w",
39
+ )
40
+ self.explanation_lbl1 = Label(
41
+ self.frame_info,
42
+ text="It may take a minute to get auth data.",
43
+ justify="left",
44
+ anchor="w",
45
+ )
46
+ self.explanation_lbl2 = None
47
+ if platform.system() == "Darwin":
48
+ self.explanation_lbl2 = Label(
49
+ self.frame_info,
50
+ text="You need to disable SIP and may be asked for user password.",
51
+ justify="left",
52
+ anchor="w",
53
+ )
54
+
55
+ self.explanation_lbl0.grid(column=0, row=0, sticky="w", padx=3, pady=3)
56
+ self.explanation_lbl1.grid(column=0, row=1, sticky="w", padx=3, pady=3)
57
+ if self.explanation_lbl2 is not None:
58
+ self.explanation_lbl2.grid(column=0, row=2, sticky="w", padx=3, pady=3)
59
+
60
+ # Start button frame
61
+ self.launch_btn = Button(
62
+ self.frame_btns,
63
+ text="Launch Viber Desktop",
64
+ command=self.cb_launch_viber,
65
+ bootstyle="secondary", # type: ignore
66
+ )
67
+
68
+ self.get_cred_btn = Button(
69
+ self.frame_btns,
70
+ text="Get auth data",
71
+ command=self.cb_get_cred,
72
+ bootstyle="default", # type: ignore
73
+ )
74
+
75
+ self.launch_btn.pack()
76
+ self.get_cred_btn.pack()
77
+
78
+ # Config frame
79
+ self.setdir_lbl = Label(
80
+ self.frame_config,
81
+ text=self.gui.help["cred"]["viber_bin_path"],
82
+ justify="left",
83
+ anchor="w",
84
+ )
85
+
86
+ self.setdir_entry = Entry(
87
+ self.frame_config,
88
+ textvariable=self.gui.viber_bin_path_var,
89
+ width=32,
90
+ )
91
+ self.setdir_btn = Button(
92
+ self.frame_config,
93
+ text="Choose",
94
+ command=self.cb_setdir,
95
+ width=8,
96
+ bootstyle="secondary", # type: ignore
97
+ )
98
+
99
+ self.setdir_lbl.grid(column=0, row=0, columnspan=2, sticky="w", padx=3, pady=3)
100
+ self.setdir_entry.grid(column=0, row=1, sticky="w", padx=3, pady=3)
101
+ self.setdir_btn.grid(column=1, row=1, sticky="e", padx=3, pady=3)
102
+
103
+ GUIUtils.finalize_window(self)
104
+
105
+ def cb_get_cred(self) -> None:
106
+ m = GetViberAuth(self.cb_ask_str_viber)
107
+
108
+ viber_bin_path = None
109
+ if self.gui.viber_bin_path_var.get():
110
+ viber_bin_path = self.gui.viber_bin_path_var.get()
111
+
112
+ viber_auth, msg = m.get_cred(viber_bin_path)
113
+
114
+ if viber_auth:
115
+ if not self.gui.creds.get("viber"):
116
+ self.gui.creds["viber"] = {}
117
+ self.gui.creds["viber"]["auth"] = viber_auth
118
+ self.gui.viber_auth_var.set(viber_auth)
119
+
120
+ self.gui.save_creds()
121
+ self.gui.highlight_fields()
122
+
123
+ self.cb_msg_block_viber(msg)
124
+
125
+ def cb_launch_viber(self) -> None:
126
+ m = GetViberAuth(self.cb_ask_str_viber)
127
+ viber_bin_path = m.get_viber_desktop()
128
+
129
+ if self.gui.viber_auth_var.get():
130
+ viber_bin_path = self.gui.viber_auth_var.get()
131
+
132
+ if viber_bin_path:
133
+ Popen([viber_bin_path])
134
+ else:
135
+ self.cb_msg_block_viber("Error: Viber Desktop not installed.")
136
+
137
+ def cb_setdir(self) -> None:
138
+ orig_input_dir = self.gui.viber_bin_path_var.get()
139
+ if not Path(orig_input_dir).is_dir():
140
+ orig_input_dir = ""
141
+ input_dir = filedialog.askdirectory(initialdir=orig_input_dir)
142
+ if input_dir:
143
+ self.gui.viber_bin_path_var.set(input_dir)
@@ -21,6 +21,7 @@ from sticker_convert.job_option import CompOption, CredOption, InputOption, Outp
21
21
  from sticker_convert.uploaders.compress_wastickers import CompressWastickers
22
22
  from sticker_convert.uploaders.upload_signal import UploadSignal
23
23
  from sticker_convert.uploaders.upload_telegram import UploadTelegram
24
+ from sticker_convert.uploaders.upload_viber import UploadViber
24
25
  from sticker_convert.uploaders.xcode_imessage import XcodeImessage
25
26
  from sticker_convert.utils.callback import CallbackReturn, CbQueueType, ResultsListType, WorkQueueType
26
27
  from sticker_convert.utils.files.json_resources_loader import OUTPUT_JSON
@@ -305,6 +306,10 @@ class Job:
305
306
  error_msg += "[X] Uploading to signal requires uuid and password.\n"
306
307
  error_msg += save_to_local_tip
307
308
 
309
+ if self.opt_output.option == "viber" and not self.opt_cred.viber_auth:
310
+ error_msg += "[X] Uploading to Viber requires auth data.\n"
311
+ error_msg += save_to_local_tip
312
+
308
313
  output_presets = OUTPUT_JSON
309
314
 
310
315
  input_option = self.opt_input.option
@@ -656,6 +661,9 @@ class Job:
656
661
  if self.opt_output.option == "imessage":
657
662
  exporters.append(XcodeImessage.start)
658
663
 
664
+ if self.opt_output.option == "viber":
665
+ exporters.append(UploadViber.start)
666
+
659
667
  self.executor.start_workers(processes=1)
660
668
 
661
669
  for exporter in exporters:
@@ -222,6 +222,7 @@ class CredOption(BaseOption):
222
222
  kakao_country_code: str = ""
223
223
  kakao_phone_number: str = ""
224
224
  line_cookies: str = ""
225
+ viber_auth: str = ""
225
226
 
226
227
  def to_dict(self) -> Dict[Any, Any]:
227
228
  return {
@@ -235,4 +236,5 @@ class CredOption(BaseOption):
235
236
  "phone_number": self.kakao_phone_number,
236
237
  },
237
238
  "line": {"cookies": self.line_cookies},
239
+ "viber": {"auth": self.viber_auth},
238
240
  }
@@ -338,8 +338,8 @@
338
338
  "vid": ".png"
339
339
  },
340
340
  "fps": {
341
- "min": 1,
342
- "max": 1,
341
+ "min": 0,
342
+ "max": 0,
343
343
  "power": 1
344
344
  },
345
345
  "res": {
@@ -69,6 +69,9 @@
69
69
  "kakao_phone_number": "Set Kakao phone number (Phone number associated with your Kakao account)\nDo NOT enter country code\nExample: 7700900142\nUsed for send / receive verification code via SMS.\nRequired for generating Kakao auth_token.",
70
70
  "line_get_auth": "Get Line cookies from browser, which is required to create custom message stickers.",
71
71
  "line_cookies": "Set Line cookies, which is required to create custom message stickers.",
72
+ "viber_auth": "Set Viber authentication data.\nRequired for uploading Viber stickers.",
73
+ "viber_get_auth": "Generate Viber authentication data.",
74
+ "viber_bin_path": "Specify location of Viber Desktop application.\nUseful for portable installation.",
72
75
  "save_cred": "Save Signal and Telegram credentials."
73
76
  }
74
77
  }
@@ -0,0 +1,26 @@
1
+ #!/bin/bash
2
+ # Reference: https://github.com/hajzer/bash-memory-dump
3
+
4
+ OS_PAGESIZE=`getconf PAGESIZE`
5
+
6
+ PID=$1
7
+ PID_MAPS=/proc/$PID/maps
8
+ PID_MEM=/proc/$PID/mem
9
+
10
+ rm -f /tmp/viber.dmp.$PID
11
+ grep rw-p $PID_MAPS |
12
+ while IFS='' read -r line || [[ -n "$line" ]]; do
13
+ range=`echo $line | awk '{print $1;}'`
14
+
15
+ vma_start=$(( 0x`echo $range | cut -d- -f1` ))
16
+ vma_end=$(( 0x`echo $range | cut -d- -f2` ))
17
+ vma_size=$(( $vma_end - $vma_start ))
18
+
19
+ dd_start=$(( $vma_start / $OS_PAGESIZE ))
20
+ dd_bs=$OS_PAGESIZE
21
+ dd_count=$(( $vma_size / $OS_PAGESIZE ))
22
+
23
+ set +e
24
+ dd if="$PID_MEM" bs="$dd_bs" skip="$dd_start" count="$dd_count"
25
+ set -e
26
+ done
@@ -23,6 +23,14 @@
23
23
  "author": false
24
24
  }
25
25
  },
26
+ "viber": {
27
+ "full_name": "Upload to Viber",
28
+ "help": "Upload to Viber",
29
+ "metadata_requirements": {
30
+ "title": true,
31
+ "author": false
32
+ }
33
+ },
26
34
  "whatsapp": {
27
35
  "full_name": "Compress to .wastickers (WhatsApp)",
28
36
  "help": "Create a .wastickers file for uploading to WhatsApp",