sticker-convert 2.10.1__tar.gz → 2.10.2__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.10.1/src/sticker_convert.egg-info → sticker_convert-2.10.2}/PKG-INFO +22 -9
  2. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/README.md +21 -8
  3. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/cli.py +16 -0
  4. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/downloaders/download_base.py +24 -5
  5. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/downloaders/download_kakao.py +7 -3
  6. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/gui.py +1 -0
  7. sticker_convert-2.10.2/src/sticker_convert/gui_components/windows/kakao_get_auth_window.py +304 -0
  8. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/gui_components/windows/viber_get_auth_window.py +5 -1
  9. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/resources/help.json +3 -1
  10. sticker_convert-2.10.2/src/sticker_convert/utils/auth/get_kakao_desktop_auth.py +180 -0
  11. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/version.py +1 -1
  12. {sticker_convert-2.10.1 → sticker_convert-2.10.2/src/sticker_convert.egg-info}/PKG-INFO +22 -9
  13. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert.egg-info/SOURCES.txt +1 -0
  14. sticker_convert-2.10.1/src/sticker_convert/gui_components/windows/kakao_get_auth_window.py +0 -186
  15. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/LICENSE +0 -0
  16. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/MANIFEST.in +0 -0
  17. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/pyproject.toml +0 -0
  18. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/requirements.txt +0 -0
  19. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/setup.cfg +0 -0
  20. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/__init__.py +0 -0
  21. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/__main__.py +0 -0
  22. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/converter.py +0 -0
  23. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/definitions.py +0 -0
  24. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/downloaders/__init__.py +0 -0
  25. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/downloaders/download_discord.py +0 -0
  26. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/downloaders/download_line.py +0 -0
  27. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/downloaders/download_signal.py +0 -0
  28. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/downloaders/download_telegram.py +0 -0
  29. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/downloaders/download_viber.py +0 -0
  30. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/gui_components/__init__.py +0 -0
  31. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/gui_components/frames/__init__.py +0 -0
  32. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/gui_components/frames/comp_frame.py +0 -0
  33. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/gui_components/frames/config_frame.py +0 -0
  34. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/gui_components/frames/control_frame.py +0 -0
  35. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/gui_components/frames/cred_frame.py +0 -0
  36. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/gui_components/frames/input_frame.py +0 -0
  37. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/gui_components/frames/output_frame.py +0 -0
  38. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/gui_components/frames/progress_frame.py +0 -0
  39. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/gui_components/frames/right_clicker.py +0 -0
  40. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/gui_components/gui_utils.py +0 -0
  41. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/gui_components/windows/__init__.py +0 -0
  42. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/gui_components/windows/advanced_compression_window.py +0 -0
  43. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/gui_components/windows/base_window.py +0 -0
  44. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/gui_components/windows/discord_get_auth_window.py +0 -0
  45. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/gui_components/windows/line_get_auth_window.py +0 -0
  46. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/gui_components/windows/signal_get_auth_window.py +0 -0
  47. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/ios-message-stickers-template/.github/FUNDING.yml +0 -0
  48. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/ios-message-stickers-template/.gitignore +0 -0
  49. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/ios-message-stickers-template/README.md +0 -0
  50. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/ios-message-stickers-template/stickers/Info.plist +0 -0
  51. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Info.plist +0 -0
  52. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/Contents.json +0 -0
  53. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/Sticker Pack.stickerpack/Contents.json +0 -0
  54. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/Sticker Pack.stickerpack/Sticker 1.sticker/Contents.json +0 -0
  55. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/Sticker Pack.stickerpack/Sticker 1.sticker/Sticker 1.png +0 -0
  56. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/Sticker Pack.stickerpack/Sticker 2.sticker/Contents.json +0 -0
  57. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/Sticker Pack.stickerpack/Sticker 2.sticker/Sticker 2.png +0 -0
  58. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/Sticker Pack.stickerpack/Sticker 3.sticker/Contents.json +0 -0
  59. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/Sticker Pack.stickerpack/Sticker 3.sticker/Sticker 3.png +0 -0
  60. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/App-Store-1024x1024pt.png +0 -0
  61. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Contents.json +0 -0
  62. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Messages-App-Store-1024x768pt.png +0 -0
  63. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Messages-iPad-67x50pt@2x.png +0 -0
  64. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Messages-iPad-Pro-74x55pt@2x.png +0 -0
  65. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Messages-iPhone-60x45pt@2x.png +0 -0
  66. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Messages-iPhone-60x45pt@3x.png +0 -0
  67. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Messages27x20pt@2x.png +0 -0
  68. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Messages27x20pt@3x.png +0 -0
  69. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Messages32x24pt@2x.png +0 -0
  70. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Messages32x24pt@3x.png +0 -0
  71. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/iPad-Settings-29pt@2x.png +0 -0
  72. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/iPhone-Settings-29pt@3x.png +0 -0
  73. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/iPhone-settings-29pt@2x.png +0 -0
  74. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/ios-message-stickers-template/stickers.xcodeproj/project.pbxproj +0 -0
  75. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/ios-message-stickers-template/stickers.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -0
  76. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/ios-message-stickers-template/stickers.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -0
  77. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/ios-message-stickers-template/stickers.xcodeproj/project.xcworkspace/xcuserdata/niklaspeterson.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  78. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/ios-message-stickers-template/stickers.xcodeproj/xcuserdata/niklaspeterson.xcuserdatad/xcschemes/xcschememanagement.plist +0 -0
  79. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/job.py +0 -0
  80. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/job_option.py +0 -0
  81. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/resources/NotoColorEmoji.ttf +0 -0
  82. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/resources/appicon.icns +0 -0
  83. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/resources/appicon.ico +0 -0
  84. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/resources/appicon.png +0 -0
  85. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/resources/compression.json +0 -0
  86. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/resources/emoji.json +0 -0
  87. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/resources/input.json +0 -0
  88. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/resources/memdump_linux.sh +0 -0
  89. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/resources/memdump_windows.ps1 +0 -0
  90. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/resources/output.json +0 -0
  91. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/uploaders/__init__.py +0 -0
  92. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/uploaders/compress_wastickers.py +0 -0
  93. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/uploaders/upload_base.py +0 -0
  94. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/uploaders/upload_signal.py +0 -0
  95. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/uploaders/upload_telegram.py +0 -0
  96. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/uploaders/upload_viber.py +0 -0
  97. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/uploaders/xcode_imessage.py +0 -0
  98. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/utils/auth/get_discord_auth.py +0 -0
  99. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/utils/auth/get_kakao_auth.py +0 -0
  100. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/utils/auth/get_line_auth.py +0 -0
  101. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/utils/auth/get_signal_auth.py +0 -0
  102. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/utils/auth/get_viber_auth.py +0 -0
  103. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/utils/callback.py +0 -0
  104. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/utils/chrome_remotedebug.py +0 -0
  105. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/utils/emoji.py +0 -0
  106. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/utils/files/cache_store.py +0 -0
  107. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/utils/files/json_manager.py +0 -0
  108. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/utils/files/json_resources_loader.py +0 -0
  109. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/utils/files/metadata_handler.py +0 -0
  110. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/utils/files/run_bin.py +0 -0
  111. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/utils/files/sanitize_filename.py +0 -0
  112. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/utils/media/apple_png_normalize.py +0 -0
  113. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/utils/media/codec_info.py +0 -0
  114. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/utils/media/decrypt_kakao.py +0 -0
  115. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/utils/media/format_verify.py +0 -0
  116. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/utils/process.py +0 -0
  117. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert/utils/url_detect.py +0 -0
  118. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert.egg-info/dependency_links.txt +0 -0
  119. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert.egg-info/entry_points.txt +0 -0
  120. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert.egg-info/requires.txt +0 -0
  121. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/src/sticker_convert.egg-info/top_level.txt +0 -0
  122. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/tests/test_compression.py +0 -0
  123. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/tests/test_download.py +0 -0
  124. {sticker_convert-2.10.1 → sticker_convert-2.10.2}/tests/test_export.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: sticker-convert
3
- Version: 2.10.1
3
+ Version: 2.10.2
4
4
  Summary: Convert (animated) stickers to/from WhatsApp, Telegram, Signal, Line, Kakao, Viber, Discord, iMessage. Written in Python.
5
5
  Author-email: laggykiller <chaudominic2@gmail.com>
6
6
  Maintainer-email: laggykiller <chaudominic2@gmail.com>
@@ -488,13 +488,20 @@ To run in CLI mode, pass on any arguments
488
488
  ```
489
489
  usage: sticker-convert.py [-h] [--version] [--no-confirm] [--no-progress] [--custom-presets CUSTOM_PRESETS] [--input-dir INPUT_DIR]
490
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]
491
+ [--output-dir OUTPUT_DIR] [--author AUTHOR] [--title TITLE]
492
+ [--export-signal | --export-telegram | --export-telegram-emoji | --export-viber | --export-whatsapp | --export-imessage] [--no-compress]
493
+ [--preset {auto,signal,telegram,telegram_emoji,whatsapp,line,kakao,viber,discord,discord_emoji,imessage_small,imessage_medium,imessage_large,custom}]
494
+ [--steps STEPS] [--processes PROCESSES] [--fps-min FPS_MIN] [--fps-max FPS_MAX] [--fps-power FPS_POWER] [--res-min RES_MIN] [--res-max RES_MAX]
495
+ [--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]
496
+ [--quality-min QUALITY_MIN] [--quality-max QUALITY_MAX] [--quality-power QUALITY_POWER] [--color-min COLOR_MIN] [--color-max COLOR_MAX]
497
+ [--color-power COLOR_POWER] [--duration-min DURATION_MIN] [--duration-max DURATION_MAX] [--padding-percent PADDING_PERCENT]
498
+ [--bg-color BG_COLOR] [--vid-size-max VID_SIZE_MAX] [--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] [--cache-dir CACHE_DIR] [--default-emoji DEFAULT_EMOJI]
500
+ [--signal-uuid SIGNAL_UUID] [--signal-password SIGNAL_PASSWORD] [--signal-get-auth] [--telegram-token TELEGRAM_TOKEN]
501
+ [--telegram-userid TELEGRAM_USERID] [--kakao-auth-token KAKAO_AUTH_TOKEN] [--kakao-get-auth] [--kakao-get-auth-desktop]
502
+ [--kakao-bin-path KAKAO_BIN_PATH] [--kakao-username KAKAO_USERNAME] [--kakao-password KAKAO_PASSWORD] [--kakao-country-code KAKAO_COUNTRY_CODE]
503
+ [--kakao-phone-number KAKAO_PHONE_NUMBER] [--line-get-auth] [--line-cookies LINE_COOKIES] [--viber-auth VIBER_AUTH]
504
+ [--viber-get-auth VIBER_GET_AUTH] [--viber-bin-path VIBER_BIN_PATH] [--discord-get-auth] [--discord-token DISCORD_TOKEN] [--save-cred SAVE_CRED]
498
505
 
499
506
  CLI for stickers-convert
500
507
 
@@ -647,7 +654,13 @@ Credentials options:
647
654
  Set telegram user_id (From real account, not bot account). Required for uploading Telegram stickers.
648
655
  --kakao-auth-token KAKAO_AUTH_TOKEN
649
656
  Set Kakao auth_token. Required for downloading animated stickers from https://e.kakao.com/t/xxxxx
650
- --kakao-get-auth Generate Kakao auth_token. Kakao username, password, country code and phone number are also required.
657
+ --kakao-get-auth Generate Kakao auth_token by simulating login. Kakao username, password, country code and phone number are also required.
658
+ --kakao-get-auth-desktop
659
+ Get Kakao auth_token from Kakao Desktop application.
660
+ (Only working on Windows.)
661
+ --kakao-bin-path KAKAO_BIN_PATH
662
+ Set Kakao Desktop application path for launching and getting auth_token.
663
+ Useful for portable installation.
651
664
  --kakao-username KAKAO_USERNAME
652
665
  Set Kakao username, which is email or phone number used for signing up Kakao account
653
666
  Example: +447700900142
@@ -98,13 +98,20 @@ To run in CLI mode, pass on any arguments
98
98
  ```
99
99
  usage: sticker-convert.py [-h] [--version] [--no-confirm] [--no-progress] [--custom-presets CUSTOM_PRESETS] [--input-dir INPUT_DIR]
100
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]
101
+ [--output-dir OUTPUT_DIR] [--author AUTHOR] [--title TITLE]
102
+ [--export-signal | --export-telegram | --export-telegram-emoji | --export-viber | --export-whatsapp | --export-imessage] [--no-compress]
103
+ [--preset {auto,signal,telegram,telegram_emoji,whatsapp,line,kakao,viber,discord,discord_emoji,imessage_small,imessage_medium,imessage_large,custom}]
104
+ [--steps STEPS] [--processes PROCESSES] [--fps-min FPS_MIN] [--fps-max FPS_MAX] [--fps-power FPS_POWER] [--res-min RES_MIN] [--res-max RES_MAX]
105
+ [--res-w-min RES_W_MIN] [--res-w-max RES_W_MAX] [--res-h-min RES_H_MIN] [--res-h-max RES_H_MAX] [--res-power RES_POWER]
106
+ [--quality-min QUALITY_MIN] [--quality-max QUALITY_MAX] [--quality-power QUALITY_POWER] [--color-min COLOR_MIN] [--color-max COLOR_MAX]
107
+ [--color-power COLOR_POWER] [--duration-min DURATION_MIN] [--duration-max DURATION_MAX] [--padding-percent PADDING_PERCENT]
108
+ [--bg-color BG_COLOR] [--vid-size-max VID_SIZE_MAX] [--img-size-max IMG_SIZE_MAX] [--vid-format VID_FORMAT] [--img-format IMG_FORMAT]
109
+ [--fake-vid] [--scale-filter SCALE_FILTER] [--quantize-method QUANTIZE_METHOD] [--cache-dir CACHE_DIR] [--default-emoji DEFAULT_EMOJI]
110
+ [--signal-uuid SIGNAL_UUID] [--signal-password SIGNAL_PASSWORD] [--signal-get-auth] [--telegram-token TELEGRAM_TOKEN]
111
+ [--telegram-userid TELEGRAM_USERID] [--kakao-auth-token KAKAO_AUTH_TOKEN] [--kakao-get-auth] [--kakao-get-auth-desktop]
112
+ [--kakao-bin-path KAKAO_BIN_PATH] [--kakao-username KAKAO_USERNAME] [--kakao-password KAKAO_PASSWORD] [--kakao-country-code KAKAO_COUNTRY_CODE]
113
+ [--kakao-phone-number KAKAO_PHONE_NUMBER] [--line-get-auth] [--line-cookies LINE_COOKIES] [--viber-auth VIBER_AUTH]
114
+ [--viber-get-auth VIBER_GET_AUTH] [--viber-bin-path VIBER_BIN_PATH] [--discord-get-auth] [--discord-token DISCORD_TOKEN] [--save-cred SAVE_CRED]
108
115
 
109
116
  CLI for stickers-convert
110
117
 
@@ -257,7 +264,13 @@ Credentials options:
257
264
  Set telegram user_id (From real account, not bot account). Required for uploading Telegram stickers.
258
265
  --kakao-auth-token KAKAO_AUTH_TOKEN
259
266
  Set Kakao auth_token. Required for downloading animated stickers from https://e.kakao.com/t/xxxxx
260
- --kakao-get-auth Generate Kakao auth_token. Kakao username, password, country code and phone number are also required.
267
+ --kakao-get-auth Generate Kakao auth_token by simulating login. Kakao username, password, country code and phone number are also required.
268
+ --kakao-get-auth-desktop
269
+ Get Kakao auth_token from Kakao Desktop application.
270
+ (Only working on Windows.)
271
+ --kakao-bin-path KAKAO_BIN_PATH
272
+ Set Kakao Desktop application path for launching and getting auth_token.
273
+ Useful for portable installation.
261
274
  --kakao-username KAKAO_USERNAME
262
275
  Set Kakao username, which is email or phone number used for signing up Kakao account
263
276
  Example: +447700900142
@@ -16,6 +16,7 @@ from sticker_convert.job import Job
16
16
  from sticker_convert.job_option import CompOption, CredOption, InputOption, OutputOption
17
17
  from sticker_convert.utils.auth.get_discord_auth import GetDiscordAuth
18
18
  from sticker_convert.utils.auth.get_kakao_auth import GetKakaoAuth
19
+ from sticker_convert.utils.auth.get_kakao_desktop_auth import GetKakaoDesktopAuth
19
20
  from sticker_convert.utils.auth.get_line_auth import GetLineAuth
20
21
  from sticker_convert.utils.auth.get_signal_auth import GetSignalAuth
21
22
  from sticker_convert.utils.auth.get_viber_auth import GetViberAuth
@@ -168,6 +169,7 @@ class CLI:
168
169
  flags_cred_bool = (
169
170
  "signal_get_auth",
170
171
  "kakao_get_auth",
172
+ "kakao_get_auth_desktop",
171
173
  "line_get_auth",
172
174
  "discord_get_auth",
173
175
  )
@@ -483,6 +485,20 @@ class CLI:
483
485
 
484
486
  self.cb.msg(f"Got auth_token successfully: {auth_token}")
485
487
 
488
+ if args.kakao_get_auth_desktop:
489
+ get_kakao_desktop_auth = GetKakaoDesktopAuth(
490
+ cb_ask_str=self.cb.ask_str,
491
+ )
492
+ kakao_bin_path = None
493
+ if args.kakao_bin_path:
494
+ kakao_bin_path = args.kakao_bin_path
495
+ auth_token, msg = get_kakao_desktop_auth.get_cred(kakao_bin_path)
496
+
497
+ if auth_token:
498
+ opt_cred.kakao_auth_token = auth_token
499
+
500
+ self.cb.msg(msg)
501
+
486
502
  if args.signal_get_auth:
487
503
  m = GetSignalAuth(cb_msg=self.cb.msg, cb_ask_str=self.cb.ask_str)
488
504
 
@@ -29,14 +29,24 @@ class DownloadBase:
29
29
  self.cb_return = cb_return
30
30
 
31
31
  def download_multiple_files(
32
- self, targets: List[Tuple[str, Path]], retries: int = 3, **kwargs: Any
32
+ self,
33
+ targets: List[Tuple[str, Path]],
34
+ retries: int = 3,
35
+ headers: Optional[dict[Any, Any]] = None,
36
+ **kwargs: Any,
33
37
  ) -> None:
34
38
  anyio.run(
35
- partial(self.download_multiple_files_async, targets, retries, **kwargs)
39
+ partial(
40
+ self.download_multiple_files_async, targets, retries, headers, **kwargs
41
+ )
36
42
  )
37
43
 
38
44
  async def download_multiple_files_async(
39
- self, targets: List[Tuple[str, Path]], retries: int = 3, **kwargs: Any
45
+ self,
46
+ targets: List[Tuple[str, Path]],
47
+ retries: int = 3,
48
+ headers: Optional[dict[Any, Any]] = None,
49
+ **kwargs: Any,
40
50
  ) -> None:
41
51
  # targets format: [(url1, dest2), (url2, dest2), ...]
42
52
  self.cb.put(
@@ -47,7 +57,13 @@ class DownloadBase:
47
57
  async with anyio.create_task_group() as tg:
48
58
  for url, dest in targets:
49
59
  tg.start_soon(
50
- self.download_file_async, client, url, dest, retries, **kwargs
60
+ self.download_file_async,
61
+ client,
62
+ url,
63
+ dest,
64
+ retries,
65
+ headers,
66
+ **kwargs,
51
67
  )
52
68
 
53
69
  async def download_file_async(
@@ -56,11 +72,14 @@ class DownloadBase:
56
72
  url: str,
57
73
  dest: Path,
58
74
  retries: int = 3,
75
+ headers: Optional[dict[Any, Any]] = None,
59
76
  **kwargs: Any,
60
77
  ) -> None:
61
78
  self.cb.put(f"Downloading {url}")
62
79
  for retry in range(retries):
63
- response = await client.get(url, follow_redirects=True, **kwargs)
80
+ response = await client.get(
81
+ url, follow_redirects=True, headers=headers, **kwargs
82
+ )
64
83
 
65
84
  if response.is_success:
66
85
  async with await anyio.open_file(dest, "wb+") as f:
@@ -231,6 +231,8 @@ class DownloadKakao(DownloadBase):
231
231
  sound_path_format = None
232
232
  stickers_count = 32 # https://emoticonstudio.kakao.com/pages/start
233
233
 
234
+ headers = {"User-Agent": "Android"}
235
+
234
236
  if not self.pack_info_authed and self.auth_token:
235
237
  self.pack_info_authed = MetadataKakao.get_pack_info_authed(
236
238
  item_code, self.auth_token
@@ -263,7 +265,8 @@ class DownloadKakao(DownloadBase):
263
265
  if play_path_format is None:
264
266
  for play_type, play_ext in itertools.product(play_types, play_exts):
265
267
  r = requests.get(
266
- f"https://item.kakaocdn.net/dw/{item_code}.{play_type}_001{play_ext}"
268
+ f"https://item.kakaocdn.net/dw/{item_code}.{play_type}_001{play_ext}",
269
+ headers=headers,
267
270
  )
268
271
  if r.ok:
269
272
  break
@@ -279,7 +282,8 @@ class DownloadKakao(DownloadBase):
279
282
  if sound_path_format is None:
280
283
  for sound_ext in sound_exts:
281
284
  r = requests.get(
282
- f"https://item.kakaocdn.net/dw/{item_code}.sound_001{sound_ext}"
285
+ f"https://item.kakaocdn.net/dw/{item_code}.sound_001{sound_ext}",
286
+ headers=headers,
283
287
  )
284
288
  if r.ok:
285
289
  break
@@ -304,7 +308,7 @@ class DownloadKakao(DownloadBase):
304
308
  sound_dl_path = Path(self.out_dir, str(num).zfill(3) + sound_ext)
305
309
  targets.append((sound_url, sound_dl_path))
306
310
 
307
- self.download_multiple_files(targets)
311
+ self.download_multiple_files(targets, headers=headers)
308
312
 
309
313
  for target in targets:
310
314
  f_path = target[1]
@@ -157,6 +157,7 @@ class GUI(Window):
157
157
  self.kakao_password_var = StringVar(self)
158
158
  self.kakao_country_code_var = StringVar(self)
159
159
  self.kakao_phone_number_var = StringVar(self)
160
+ self.kakao_bin_path_var = StringVar(self)
160
161
  self.line_cookies_var = StringVar(self)
161
162
  self.viber_auth_var = StringVar(self)
162
163
  self.viber_bin_path_var = StringVar(self)
@@ -0,0 +1,304 @@
1
+ #!/usr/bin/env python3
2
+ import platform
3
+ import subprocess
4
+ from functools import partial
5
+ from threading import Thread
6
+ from typing import Any, Optional
7
+
8
+ from ttkbootstrap import Button, Entry, Frame, Label, LabelFrame # type: ignore
9
+
10
+ from sticker_convert.gui_components.frames.right_clicker import RightClicker
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_kakao_auth import GetKakaoAuth
14
+ from sticker_convert.utils.auth.get_kakao_desktop_auth import GetKakaoDesktopAuth
15
+
16
+
17
+ class KakaoGetAuthWindow(BaseWindow):
18
+ def __init__(self, *args: Any, **kwargs: Any) -> None:
19
+ super().__init__(*args, **kwargs)
20
+
21
+ self.title("Get Kakao auth_token")
22
+
23
+ self.cb_msg_block_kakao = partial(self.gui.cb_msg_block, parent=self)
24
+ self.cb_ask_str_kakao = partial(self.gui.cb_ask_str, parent=self)
25
+
26
+ self.frame_from_desktop = LabelFrame(
27
+ self.scrollable_frame, text="Method 1: From KakaoTalk Desktop"
28
+ )
29
+ self.frame_simulate_login = LabelFrame(
30
+ self.scrollable_frame, text="Method 2: Simulate login"
31
+ )
32
+ self.frame_login_btn = Frame(self.scrollable_frame)
33
+
34
+ self.frame_from_desktop.grid(column=0, row=0, sticky="news", padx=3, pady=3)
35
+ self.frame_simulate_login.grid(column=0, row=1, sticky="news", padx=3, pady=3)
36
+
37
+ # Method 1 frame
38
+ self.explanation1_1_lbl = Label(
39
+ self.frame_from_desktop,
40
+ text="This will get Kakao auth_token from Kakao Desktop (Windows only)",
41
+ justify="left",
42
+ anchor="w",
43
+ )
44
+ self.explanation1_2_lbl = Label(
45
+ self.frame_from_desktop,
46
+ text="Download Kakao Desktop, login and press 'Get auth_token'",
47
+ justify="left",
48
+ anchor="w",
49
+ )
50
+ self.explanation1_3_lbl = Label(
51
+ self.frame_from_desktop,
52
+ text="This can take about a minute.",
53
+ justify="left",
54
+ anchor="w",
55
+ )
56
+ self.kakao_bin_path_lbl = Label(
57
+ self.frame_from_desktop,
58
+ text="Kakao app path (Optional):",
59
+ justify="left",
60
+ anchor="w",
61
+ )
62
+ self.kakao_bin_path_entry = Entry(
63
+ self.frame_from_desktop,
64
+ textvariable=self.gui.kakao_bin_path_var,
65
+ width=30,
66
+ )
67
+ self.launch_desktop_btn = Button(
68
+ self.frame_from_desktop,
69
+ text="Launch Desktop app",
70
+ command=self.cb_launch_desktop,
71
+ width=24,
72
+ bootstyle="secondary", # type: ignore
73
+ state="normal" if platform.system() == "Windows" else "disabled",
74
+ )
75
+ self.get_auth_desktop_btn = Button(
76
+ self.frame_from_desktop,
77
+ text="Get auth_token",
78
+ command=self.cb_from_desktop,
79
+ width=24,
80
+ state="normal" if platform.system() == "Windows" else "disabled",
81
+ )
82
+
83
+ self.explanation1_1_lbl.grid(
84
+ column=0, row=0, columnspan=2, sticky="w", padx=3, pady=3
85
+ )
86
+ self.explanation1_2_lbl.grid(
87
+ column=0, row=1, columnspan=2, sticky="w", padx=3, pady=3
88
+ )
89
+ self.explanation1_3_lbl.grid(
90
+ column=0, row=2, columnspan=2, sticky="w", padx=3, pady=3
91
+ )
92
+ self.kakao_bin_path_lbl.grid(column=0, row=3, sticky="w", padx=3, pady=3)
93
+ self.kakao_bin_path_entry.grid(column=1, row=3, sticky="w", padx=3, pady=3)
94
+ self.launch_desktop_btn.grid(column=0, row=4, columnspan=2, padx=3, pady=3)
95
+ self.get_auth_desktop_btn.grid(column=0, row=5, columnspan=2, padx=3, pady=3)
96
+
97
+ # Method 2 frame
98
+ self.explanation2_1_lbl = Label(
99
+ self.frame_simulate_login,
100
+ text="This will simulate login to Android Kakao app",
101
+ justify="left",
102
+ anchor="w",
103
+ )
104
+ self.explanation2_2_lbl = Label(
105
+ self.frame_simulate_login,
106
+ text="You will send / receive verification code via SMS",
107
+ justify="left",
108
+ anchor="w",
109
+ )
110
+ self.explanation2_3_lbl = Label(
111
+ self.frame_simulate_login,
112
+ text="You will be logged out of existing device",
113
+ justify="left",
114
+ anchor="w",
115
+ )
116
+
117
+ self.kakao_username_help_btn = Button(
118
+ self.frame_simulate_login,
119
+ text="?",
120
+ width=1,
121
+ command=lambda: self.cb_msg_block_kakao(
122
+ self.gui.help["cred"]["kakao_username"]
123
+ ),
124
+ bootstyle="secondary", # type: ignore
125
+ )
126
+ self.kakao_username_lbl = Label(
127
+ self.frame_simulate_login,
128
+ text="Username",
129
+ width=18,
130
+ justify="left",
131
+ anchor="w",
132
+ )
133
+ self.kakao_username_entry = Entry(
134
+ self.frame_simulate_login,
135
+ textvariable=self.gui.kakao_username_var,
136
+ width=30,
137
+ )
138
+ self.kakao_username_entry.bind("<Button-3><ButtonRelease-3>", RightClicker)
139
+
140
+ self.kakao_password_help_btn = Button(
141
+ self.frame_simulate_login,
142
+ text="?",
143
+ width=1,
144
+ command=lambda: self.cb_msg_block_kakao(
145
+ self.gui.help["cred"]["kakao_password"]
146
+ ),
147
+ bootstyle="secondary", # type: ignore
148
+ )
149
+ self.kakao_password_lbl = Label(
150
+ self.frame_simulate_login, text="Password", justify="left", anchor="w"
151
+ )
152
+ self.kakao_password_entry = Entry(
153
+ self.frame_simulate_login,
154
+ textvariable=self.gui.kakao_password_var,
155
+ width=30,
156
+ )
157
+ self.kakao_password_entry.bind("<Button-3><ButtonRelease-3>", RightClicker)
158
+
159
+ self.kakao_country_code_help_btn = Button(
160
+ self.frame_simulate_login,
161
+ text="?",
162
+ width=1,
163
+ command=lambda: self.cb_msg_block_kakao(
164
+ self.gui.help["cred"]["kakao_country_code"]
165
+ ),
166
+ bootstyle="secondary", # type: ignore
167
+ )
168
+ self.kakao_country_code_lbl = Label(
169
+ self.frame_simulate_login, text="Country code", justify="left", anchor="w"
170
+ )
171
+ self.kakao_country_code_entry = Entry(
172
+ self.frame_simulate_login,
173
+ textvariable=self.gui.kakao_country_code_var,
174
+ width=30,
175
+ )
176
+ self.kakao_country_code_entry.bind("<Button-3><ButtonRelease-3>", RightClicker)
177
+
178
+ self.kakao_phone_number_help_btn = Button(
179
+ self.frame_simulate_login,
180
+ text="?",
181
+ width=1,
182
+ command=lambda: self.cb_msg_block_kakao(
183
+ self.gui.help["cred"]["kakao_phone_number"]
184
+ ),
185
+ bootstyle="secondary", # type: ignore
186
+ )
187
+ self.kakao_phone_number_lbl = Label(
188
+ self.frame_simulate_login, text="Phone number", justify="left", anchor="w"
189
+ )
190
+ self.kakao_phone_number_entry = Entry(
191
+ self.frame_simulate_login,
192
+ textvariable=self.gui.kakao_phone_number_var,
193
+ width=30,
194
+ )
195
+ self.kakao_phone_number_entry.bind("<Button-3><ButtonRelease-3>", RightClicker)
196
+
197
+ self.login_btn = Button(
198
+ self.frame_simulate_login,
199
+ text="Login and get auth_token",
200
+ command=self.cb_simulate_login,
201
+ width=24,
202
+ )
203
+
204
+ self.explanation2_1_lbl.grid(
205
+ column=0, row=0, columnspan=3, sticky="w", padx=3, pady=3
206
+ )
207
+ self.explanation2_2_lbl.grid(
208
+ column=0, row=1, columnspan=3, sticky="w", padx=3, pady=3
209
+ )
210
+ self.explanation2_3_lbl.grid(
211
+ column=0, row=2, columnspan=3, sticky="w", padx=3, pady=3
212
+ )
213
+
214
+ self.kakao_username_help_btn.grid(column=0, row=3, sticky="w", padx=3, pady=3)
215
+ self.kakao_username_lbl.grid(column=1, row=3, sticky="w", padx=3, pady=3)
216
+ self.kakao_username_entry.grid(column=2, row=3, sticky="w", padx=3, pady=3)
217
+
218
+ self.kakao_password_help_btn.grid(column=0, row=4, sticky="w", padx=3, pady=3)
219
+ self.kakao_password_lbl.grid(column=1, row=4, sticky="w", padx=3, pady=3)
220
+ self.kakao_password_entry.grid(column=2, row=4, sticky="w", padx=3, pady=3)
221
+
222
+ self.kakao_country_code_help_btn.grid(
223
+ column=0, row=5, sticky="w", padx=3, pady=3
224
+ )
225
+ self.kakao_country_code_lbl.grid(column=1, row=5, sticky="w", padx=3, pady=3)
226
+ self.kakao_country_code_entry.grid(column=2, row=5, sticky="w", padx=3, pady=3)
227
+
228
+ self.kakao_phone_number_help_btn.grid(
229
+ column=0, row=6, sticky="w", padx=3, pady=3
230
+ )
231
+ self.kakao_phone_number_lbl.grid(column=1, row=6, sticky="w", padx=3, pady=3)
232
+ self.kakao_phone_number_entry.grid(column=2, row=6, sticky="w", padx=3, pady=3)
233
+ self.login_btn.grid(column=0, row=7, columnspan=3, padx=3, pady=3)
234
+
235
+ GUIUtils.finalize_window(self)
236
+
237
+ def cb_simulate_login(self) -> None:
238
+ Thread(target=self.cb_simulate_login_thread, daemon=True).start()
239
+
240
+ def cb_simulate_login_thread(self, *_: Any) -> None:
241
+ self.gui.save_creds()
242
+ m = GetKakaoAuth(
243
+ opt_cred=self.gui.get_opt_cred(),
244
+ cb_msg=self.gui.cb_msg,
245
+ cb_msg_block=self.cb_msg_block_kakao,
246
+ cb_ask_str=self.cb_ask_str_kakao,
247
+ )
248
+
249
+ auth_token = m.get_cred()
250
+
251
+ if auth_token:
252
+ if not self.gui.creds.get("kakao"):
253
+ self.gui.creds["kakao"] = {}
254
+ self.gui.creds["kakao"]["auth_token"] = auth_token
255
+ self.gui.kakao_auth_token_var.set(auth_token)
256
+
257
+ self.cb_msg_block_kakao(f"Got auth_token successfully: {auth_token}")
258
+ self.gui.save_creds()
259
+ self.gui.highlight_fields()
260
+ else:
261
+ self.cb_msg_block_kakao("Failed to get auth_token")
262
+
263
+ def cb_launch_desktop(self) -> None:
264
+ m = GetKakaoDesktopAuth(
265
+ cb_ask_str=self.cb_ask_str_kakao,
266
+ )
267
+ if self.gui.kakao_bin_path_var.get() != "":
268
+ bin_path = self.gui.kakao_bin_path_var.get()
269
+ else:
270
+ bin_path = m.get_kakao_desktop()
271
+
272
+ if bin_path is not None:
273
+ subprocess.Popen([bin_path])
274
+ else:
275
+ self.cb_msg_block_kakao(
276
+ "Error: Cannot launch Kakao Desktop. Is it installed?"
277
+ )
278
+
279
+ def cb_from_desktop(self) -> None:
280
+ Thread(target=self.cb_from_desktop_thread, daemon=True).start()
281
+
282
+ def cb_from_desktop_thread(self, *_: Any) -> None:
283
+ self.gui.save_creds()
284
+ m = GetKakaoDesktopAuth(
285
+ cb_ask_str=self.cb_ask_str_kakao,
286
+ )
287
+
288
+ bin_path: Optional[str]
289
+ if self.gui.kakao_bin_path_var.get() != "":
290
+ bin_path = self.gui.kakao_bin_path_var.get()
291
+ else:
292
+ bin_path = None
293
+ auth_token, msg = m.get_cred(bin_path)
294
+
295
+ if auth_token:
296
+ if not self.gui.creds.get("kakao"):
297
+ self.gui.creds["kakao"] = {}
298
+ self.gui.creds["kakao"]["auth_token"] = auth_token
299
+ self.gui.kakao_auth_token_var.set(auth_token)
300
+
301
+ self.gui.save_creds()
302
+ self.gui.highlight_fields()
303
+
304
+ self.cb_msg_block_kakao(msg)
@@ -3,6 +3,7 @@ import platform
3
3
  from functools import partial
4
4
  from pathlib import Path
5
5
  from subprocess import Popen
6
+ from threading import Thread
6
7
  from tkinter import filedialog
7
8
  from typing import Any
8
9
 
@@ -108,7 +109,10 @@ class ViberGetAuthWindow(BaseWindow):
108
109
 
109
110
  GUIUtils.finalize_window(self)
110
111
 
111
- def cb_get_cred(self) -> None:
112
+ def cb_get_cred(self):
113
+ Thread(target=self.cb_get_cred_thread, daemon=True).start()
114
+
115
+ def cb_get_cred_thread(self) -> None:
112
116
  m = GetViberAuth(self.cb_ask_str_viber)
113
117
 
114
118
  viber_bin_path = None
@@ -61,7 +61,9 @@
61
61
  "telegram_token": "Set Telegram token. Required for uploading and downloading Telegram stickers.",
62
62
  "telegram_userid": "Set telegram user_id (From real account, not bot account). Required for uploading Telegram stickers.",
63
63
  "kakao_auth_token": "Set Kakao auth_token. Required for downloading animated stickers from https://e.kakao.com/t/xxxxx",
64
- "kakao_get_auth": "Generate Kakao auth_token. Kakao username, password, country code and phone number are also required.",
64
+ "kakao_get_auth": "Generate Kakao auth_token by simulating login. Kakao username, password, country code and phone number are also required.",
65
+ "kakao_get_auth_desktop": "Get Kakao auth_token from Kakao Desktop application.\n(Only working on Windows.)",
66
+ "kakao_bin_path": "Set Kakao Desktop application path for launching and getting auth_token.\nUseful for portable installation.",
65
67
  "kakao_username": "Set Kakao username, which is email or phone number used for signing up Kakao account\nExample: +447700900142\nRequired for generating Kakao auth_token.",
66
68
  "kakao_password": "Set Kakao password (Password of Kakao account).\nRequired for generating Kakao auth_token.",
67
69
  "kakao_country_code": "Set Kakao country code of phone.\nExample: 82 (For korea), 44 (For UK), 1 (For USA).\nRequired for generating Kakao auth_token.",