sticker-convert 2.13.3.0__py3-none-any.whl → 2.17.0.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (93) hide show
  1. sticker_convert/__main__.py +24 -27
  2. sticker_convert/auth/__init__.py +0 -0
  3. sticker_convert/auth/auth_base.py +19 -0
  4. sticker_convert/{utils/auth/get_discord_auth.py → auth/auth_discord.py} +149 -118
  5. sticker_convert/{utils/auth/get_kakao_auth.py → auth/auth_kakao_android_login.py} +331 -330
  6. sticker_convert/auth/auth_kakao_desktop_login.py +327 -0
  7. sticker_convert/{utils/auth/get_kakao_desktop_auth.py → auth/auth_kakao_desktop_memdump.py} +281 -263
  8. sticker_convert/{utils/auth/get_line_auth.py → auth/auth_line.py} +98 -80
  9. sticker_convert/{utils/auth/get_signal_auth.py → auth/auth_signal.py} +139 -135
  10. sticker_convert/auth/auth_telethon.py +161 -0
  11. sticker_convert/{utils/auth/get_viber_auth.py → auth/auth_viber.py} +250 -235
  12. sticker_convert/{utils/auth → auth}/telegram_api.py +736 -675
  13. sticker_convert/cli.py +623 -608
  14. sticker_convert/converter.py +1093 -1084
  15. sticker_convert/definitions.py +4 -0
  16. sticker_convert/downloaders/download_band.py +111 -110
  17. sticker_convert/downloaders/download_base.py +171 -166
  18. sticker_convert/downloaders/download_discord.py +92 -91
  19. sticker_convert/downloaders/download_kakao.py +417 -404
  20. sticker_convert/downloaders/download_line.py +484 -475
  21. sticker_convert/downloaders/download_ogq.py +80 -79
  22. sticker_convert/downloaders/download_signal.py +108 -105
  23. sticker_convert/downloaders/download_telegram.py +56 -55
  24. sticker_convert/downloaders/download_viber.py +121 -120
  25. sticker_convert/gui.py +788 -873
  26. sticker_convert/gui_components/frames/comp_frame.py +180 -166
  27. sticker_convert/gui_components/frames/config_frame.py +156 -113
  28. sticker_convert/gui_components/frames/control_frame.py +32 -30
  29. sticker_convert/gui_components/frames/cred_frame.py +232 -233
  30. sticker_convert/gui_components/frames/input_frame.py +139 -137
  31. sticker_convert/gui_components/frames/output_frame.py +112 -110
  32. sticker_convert/gui_components/frames/right_clicker.py +25 -23
  33. sticker_convert/gui_components/windows/advanced_compression_window.py +757 -757
  34. sticker_convert/gui_components/windows/base_window.py +7 -2
  35. sticker_convert/gui_components/windows/discord_get_auth_window.py +79 -82
  36. sticker_convert/gui_components/windows/kakao_get_auth_window.py +511 -321
  37. sticker_convert/gui_components/windows/line_get_auth_window.py +94 -102
  38. sticker_convert/gui_components/windows/signal_get_auth_window.py +84 -89
  39. sticker_convert/gui_components/windows/viber_get_auth_window.py +168 -168
  40. sticker_convert/ios-message-stickers-template/.github/FUNDING.yml +3 -3
  41. sticker_convert/ios-message-stickers-template/README.md +10 -10
  42. sticker_convert/ios-message-stickers-template/stickers/Info.plist +43 -43
  43. sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Info.plist +31 -31
  44. sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/Contents.json +6 -6
  45. sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/Sticker Pack.stickerpack/Contents.json +20 -20
  46. sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/Sticker Pack.stickerpack/Sticker 1.sticker/Contents.json +9 -9
  47. sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/Sticker Pack.stickerpack/Sticker 2.sticker/Contents.json +9 -9
  48. sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/Sticker Pack.stickerpack/Sticker 3.sticker/Contents.json +9 -9
  49. sticker_convert/ios-message-stickers-template/stickers StickerPackExtension/Stickers.xcstickers/iMessage App Icon.stickersiconset/Contents.json +91 -91
  50. sticker_convert/ios-message-stickers-template/stickers.xcodeproj/project.pbxproj +364 -364
  51. sticker_convert/ios-message-stickers-template/stickers.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -7
  52. sticker_convert/ios-message-stickers-template/stickers.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -8
  53. sticker_convert/ios-message-stickers-template/stickers.xcodeproj/xcuserdata/niklaspeterson.xcuserdatad/xcschemes/xcschememanagement.plist +14 -14
  54. sticker_convert/job.py +166 -130
  55. sticker_convert/job_option.py +1 -0
  56. sticker_convert/locales/en_US/LC_MESSAGES/base.mo +0 -0
  57. sticker_convert/locales/ja_JP/LC_MESSAGES/base.mo +0 -0
  58. sticker_convert/locales/zh_CN/LC_MESSAGES/base.mo +0 -0
  59. sticker_convert/locales/zh_TW/LC_MESSAGES/base.mo +0 -0
  60. sticker_convert/py.typed +0 -0
  61. sticker_convert/resources/NotoColorEmoji.ttf +0 -0
  62. sticker_convert/resources/help.ja_JP.json +88 -0
  63. sticker_convert/resources/help.json +10 -7
  64. sticker_convert/resources/help.zh_CN.json +88 -0
  65. sticker_convert/resources/help.zh_TW.json +88 -0
  66. sticker_convert/resources/input.ja_JP.json +74 -0
  67. sticker_convert/resources/input.json +121 -121
  68. sticker_convert/resources/input.zh_CN.json +74 -0
  69. sticker_convert/resources/input.zh_TW.json +74 -0
  70. sticker_convert/resources/output.ja_JP.json +38 -0
  71. sticker_convert/resources/output.zh_CN.json +38 -0
  72. sticker_convert/resources/output.zh_TW.json +38 -0
  73. sticker_convert/uploaders/compress_wastickers.py +186 -177
  74. sticker_convert/uploaders/upload_base.py +44 -35
  75. sticker_convert/uploaders/upload_signal.py +218 -203
  76. sticker_convert/uploaders/upload_telegram.py +353 -338
  77. sticker_convert/uploaders/upload_viber.py +178 -169
  78. sticker_convert/uploaders/xcode_imessage.py +295 -286
  79. sticker_convert/utils/callback.py +238 -6
  80. sticker_convert/utils/emoji.py +16 -4
  81. sticker_convert/utils/files/json_resources_loader.py +24 -19
  82. sticker_convert/utils/files/metadata_handler.py +3 -3
  83. sticker_convert/utils/translate.py +108 -0
  84. sticker_convert/utils/url_detect.py +40 -37
  85. sticker_convert/version.py +1 -1
  86. {sticker_convert-2.13.3.0.dist-info → sticker_convert-2.17.0.0.dist-info}/METADATA +89 -74
  87. {sticker_convert-2.13.3.0.dist-info → sticker_convert-2.17.0.0.dist-info}/RECORD +91 -74
  88. sticker_convert/utils/auth/telethon_setup.py +0 -97
  89. sticker_convert/utils/singletons.py +0 -18
  90. {sticker_convert-2.13.3.0.dist-info → sticker_convert-2.17.0.0.dist-info}/WHEEL +0 -0
  91. {sticker_convert-2.13.3.0.dist-info → sticker_convert-2.17.0.0.dist-info}/entry_points.txt +0 -0
  92. {sticker_convert-2.13.3.0.dist-info → sticker_convert-2.17.0.0.dist-info}/licenses/LICENSE +0 -0
  93. {sticker_convert-2.13.3.0.dist-info → sticker_convert-2.17.0.0.dist-info}/top_level.txt +0 -0
@@ -1,27 +1,24 @@
1
- #!/usr/bin/env python3
2
-
3
-
4
- def main() -> None:
5
- import multiprocessing
6
- import sys
7
-
8
- from sticker_convert.version import __version__
9
-
10
- multiprocessing.freeze_support()
11
- print(f"sticker-convert {__version__}")
12
- print("Free and Opensource software by laggykiller")
13
- print("https://github.com/laggykiller/sticker-convert")
14
- print()
15
- if len(sys.argv) == 1:
16
- print("Launching GUI...")
17
- from sticker_convert.gui import GUI
18
-
19
- GUI().gui()
20
- else:
21
- from sticker_convert.cli import CLI
22
-
23
- CLI().cli()
24
-
25
-
26
- if __name__ == "__main__":
27
- main()
1
+ #!/usr/bin/env python3
2
+
3
+
4
+ def main() -> None:
5
+ import multiprocessing
6
+ import sys
7
+
8
+ from sticker_convert.utils.translate import I
9
+
10
+ multiprocessing.freeze_support()
11
+
12
+ if len(sys.argv) == 1:
13
+ print(I("Launching GUI..."))
14
+ from sticker_convert.gui import GUI
15
+
16
+ GUI().gui()
17
+ else:
18
+ from sticker_convert.cli import CLI
19
+
20
+ CLI().cli()
21
+
22
+
23
+ if __name__ == "__main__":
24
+ main()
File without changes
@@ -0,0 +1,19 @@
1
+ #!/usr/bin/env python3
2
+ from typing import Optional
3
+
4
+ from sticker_convert.job_option import CredOption
5
+ from sticker_convert.utils.callback import CallbackCli, CallbackProtocol
6
+
7
+
8
+ class AuthBase:
9
+ def __init__(
10
+ self,
11
+ opt_cred: CredOption,
12
+ cb: Optional[CallbackProtocol] = None,
13
+ ) -> None:
14
+ self.opt_cred = opt_cred
15
+ self.cb: CallbackProtocol
16
+ if cb is None:
17
+ self.cb = CallbackCli()
18
+ else:
19
+ self.cb = cb
@@ -1,118 +1,149 @@
1
- #!/usr/bin/env python3
2
- import json
3
- import os
4
- import platform
5
- import shutil
6
- import time
7
- from typing import Callable, Optional, Tuple
8
- from urllib.parse import urlparse
9
-
10
- from sticker_convert.definitions import CONFIG_DIR
11
- from sticker_convert.utils.chrome_remotedebug import CRD
12
- from sticker_convert.utils.process import killall
13
-
14
-
15
- class GetDiscordAuth:
16
- def __init__(self, cb_msg: Callable[..., None] = print) -> None:
17
- chromedriver_download_dir = CONFIG_DIR / "bin"
18
- os.makedirs(chromedriver_download_dir, exist_ok=True)
19
-
20
- self.chromedriver_download_dir = chromedriver_download_dir
21
-
22
- self.cb_msg = cb_msg
23
-
24
- def get_discord_bin_path(self) -> Optional[str]:
25
- discord_bin: Optional[str]
26
- if platform.system() == "Windows":
27
- discord_win_dirs: Tuple[Tuple[str, str], ...]
28
- discord_win_dirs = (
29
- (
30
- os.path.expandvars("%localappdata%/Discord"),
31
- "Discord.exe",
32
- ),
33
- (
34
- os.path.expandvars("%localappdata%/DiscordCanary"),
35
- "DiscordCanary.exe",
36
- ),
37
- (
38
- os.path.expandvars("%localappdata%/DiscordPTB"),
39
- "DiscordPTB.exe",
40
- ),
41
- )
42
- for discord_dir, discord_bin in discord_win_dirs:
43
- app_dir: Optional[str] = None
44
- chrome_path: Optional[str] = None
45
- for i in [j for j in os.listdir(discord_dir) if j.startswith("app-")]:
46
- app_dir = os.path.join(discord_dir, i)
47
- chrome_path = os.path.join(app_dir, discord_bin)
48
- if os.path.isfile(chrome_path):
49
- return chrome_path
50
- else:
51
- discord_dirs: Tuple[Optional[str], ...]
52
- if platform.system() == "Darwin":
53
- discord_dirs = (
54
- "/Applications/Discord.app/Contents/MacOS/Discord",
55
- "/Applications/Discord Canary.app/Contents/MacOS/Discord Canary",
56
- "/Applications/Discord PTB.app/Contents/MacOS/Discord PTB",
57
- )
58
- else:
59
- discord_dirs = (
60
- shutil.which("discord"),
61
- shutil.which("discord-canary"),
62
- shutil.which("discord-ptb"),
63
- )
64
- for discord_bin in discord_dirs:
65
- if discord_bin is not None and os.path.isfile(discord_bin):
66
- return discord_bin
67
- return None
68
-
69
- def get_cred(self) -> Tuple[Optional[str], str]:
70
- using_discord_app = False
71
- chrome_path = self.get_discord_bin_path()
72
- if chrome_path is not None:
73
- using_discord_app = True
74
- else:
75
- chrome_path = CRD.get_chromium_path()
76
- if chrome_path is None:
77
- return (
78
- None,
79
- "Please install Discord Desktop or Chrome/Chromium and try again",
80
- )
81
-
82
- token = None
83
- if using_discord_app:
84
- killall("discord")
85
-
86
- crd = CRD(chrome_path)
87
- while True:
88
- crd.connect()
89
- if using_discord_app is False:
90
- crd.navigate("https://discord.com/channels/@me")
91
- break
92
- else:
93
- curr_url = crd.get_curr_url()
94
- netloc = urlparse(curr_url).netloc
95
- if netloc in ("discordapp.com", "discord.com"):
96
- break
97
- time.sleep(1)
98
-
99
- while True:
100
- try:
101
- r = crd.exec_js(
102
- "(webpackChunkdiscord_app.push([[''],{},e=>{m=[];for(let c in e.c)m.push(e.c[c])}]),m).find(m=>m?.exports?.default?.getToken!==void 0).exports.default.getToken();"
103
- )
104
- except RuntimeError:
105
- break
106
- if (
107
- json.loads(r).get("result", {}).get("result", {}).get("type", "")
108
- == "string"
109
- ):
110
- token = json.loads(r)["result"]["result"]["value"]
111
- break
112
- time.sleep(1)
113
- crd.close()
114
-
115
- if token is None:
116
- return None, "Failed to get token"
117
-
118
- return token, f"Got token successfully:\ntoken={token}"
1
+ #!/usr/bin/env python3
2
+ import json
3
+ import os
4
+ import platform
5
+ import shutil
6
+ import time
7
+ from pathlib import Path
8
+ from typing import Any, Optional, Tuple
9
+ from urllib.parse import urlparse
10
+
11
+ from sticker_convert.auth.auth_base import AuthBase
12
+ from sticker_convert.definitions import CONFIG_DIR
13
+ from sticker_convert.utils.chrome_remotedebug import CRD
14
+ from sticker_convert.utils.process import find_pid_by_name, killall
15
+ from sticker_convert.utils.translate import I
16
+
17
+
18
+ class AuthDiscord(AuthBase):
19
+ def __init__(self, *args: Any, **kwargs: Any) -> None:
20
+ self.OK_MSG = I("Got token successfully:\ntoken={}")
21
+ self.FAIL_MSG = I("Failed to get token")
22
+ super().__init__(*args, **kwargs)
23
+ chromedriver_download_dir = CONFIG_DIR / "bin"
24
+ os.makedirs(chromedriver_download_dir, exist_ok=True)
25
+
26
+ self.chromedriver_download_dir = chromedriver_download_dir
27
+
28
+ def get_discord_bin_path(self) -> Optional[str]:
29
+ discord_bin: Optional[str]
30
+ if platform.system() == "Windows":
31
+ discord_win_dirs: Tuple[Tuple[str, str], ...]
32
+ discord_win_dirs = (
33
+ (
34
+ os.path.expandvars("%localappdata%/Discord"),
35
+ "Discord.exe",
36
+ ),
37
+ (
38
+ os.path.expandvars("%localappdata%/DiscordCanary"),
39
+ "DiscordCanary.exe",
40
+ ),
41
+ (
42
+ os.path.expandvars("%localappdata%/DiscordPTB"),
43
+ "DiscordPTB.exe",
44
+ ),
45
+ )
46
+ for discord_dir, discord_bin in discord_win_dirs:
47
+ app_dir: Optional[str] = None
48
+ chrome_path: Optional[str] = None
49
+ if os.path.isdir(discord_dir) is False:
50
+ continue
51
+ for i in [j for j in os.listdir(discord_dir) if j.startswith("app-")]:
52
+ app_dir = os.path.join(discord_dir, i)
53
+ chrome_path = os.path.join(app_dir, discord_bin)
54
+ if os.path.isfile(chrome_path):
55
+ return chrome_path
56
+ else:
57
+ discord_dirs: Tuple[Optional[str], ...]
58
+ if platform.system() == "Darwin":
59
+ discord_dirs = (
60
+ "/Applications/Discord.app/Contents/MacOS/Discord",
61
+ "/Applications/Discord Canary.app/Contents/MacOS/Discord Canary",
62
+ "/Applications/Discord PTB.app/Contents/MacOS/Discord PTB",
63
+ )
64
+ else:
65
+ discord_dirs = (
66
+ shutil.which("discord"),
67
+ shutil.which("discord-canary"),
68
+ shutil.which("discord-ptb"),
69
+ )
70
+ for discord_bin in discord_dirs:
71
+ if discord_bin is not None and os.path.isfile(discord_bin):
72
+ return discord_bin
73
+ return None
74
+
75
+ def get_cred(self) -> Tuple[Optional[str], str]:
76
+ msg = I("Getting Discord authorization token...")
77
+ self.cb.put(("msg_dynamic", (msg,), None))
78
+
79
+ using_discord_app = False
80
+ chrome_path = self.get_discord_bin_path()
81
+ if chrome_path is not None:
82
+ using_discord_app = True
83
+ else:
84
+ chrome_path = CRD.get_chromium_path()
85
+ if chrome_path is None:
86
+ self.cb.put(("msg_dynamic", (None,), None))
87
+ return (
88
+ None,
89
+ I("Please install Discord Desktop or Chrome/Chromium and try again"),
90
+ )
91
+
92
+ token = None
93
+
94
+ if find_pid_by_name(Path(chrome_path).name):
95
+ response = self.cb.put(
96
+ (
97
+ "ask_bool",
98
+ (
99
+ I("All {} will be closed. Continue?").format(
100
+ Path(chrome_path).name
101
+ ),
102
+ ),
103
+ None,
104
+ )
105
+ )
106
+ if response is True:
107
+ killall(Path(chrome_path).name.lower())
108
+ else:
109
+ return None, self.FAIL_MSG
110
+
111
+ crd = CRD(chrome_path)
112
+ while True:
113
+ crd.connect()
114
+ if using_discord_app is False:
115
+ crd.navigate("https://discord.com/channels/@me")
116
+ break
117
+ else:
118
+ curr_url = crd.get_curr_url()
119
+ netloc = urlparse(curr_url).netloc
120
+ if netloc in ("discordapp.com", "discord.com"):
121
+ break
122
+ time.sleep(1)
123
+
124
+ while True:
125
+ try:
126
+ if using_discord_app:
127
+ r = crd.exec_js(
128
+ "(webpackChunkdiscord_app.push([[''],{},e=>{m=[];for(let c in e.c)m.push(e.c[c])}]),m).find(m=>m?.exports?.default?.getToken!==void 0).exports.default.getToken();"
129
+ )
130
+ else:
131
+ r = crd.exec_js(
132
+ "const iframe=document.createElement('iframe');JSON.parse(document.body.appendChild(iframe).contentWindow.localStorage.token);"
133
+ )
134
+ except RuntimeError:
135
+ break
136
+ if (
137
+ json.loads(r).get("result", {}).get("result", {}).get("type", "")
138
+ == "string"
139
+ ):
140
+ token = json.loads(r)["result"]["result"]["value"]
141
+ break
142
+ time.sleep(1)
143
+ crd.close()
144
+
145
+ self.cb.put(("msg_dynamic", (None,), None))
146
+ if token is None:
147
+ return None, self.FAIL_MSG
148
+
149
+ return token, self.OK_MSG.format(token)